Eu tenho uma imagem de disco de 30 GB de uma partição borked (acho dd if=/dev/sda1 of=diskimage
) da qual preciso recuperar alguns arquivos de texto. As ferramentas de gravação de dados foremost
só funcionam em arquivos com cabeçalhos bem definidos, ou seja, não em arquivos de texto sem formatação, então voltei ao meu bom amigo strings
.
strings diskimage > diskstrings.txt
produzi um arquivo de texto de 3GB contendo um monte de strings, principalmente coisas inúteis, misturadas com o texto que eu realmente quero.
A maior parte da crosta tende a ser realmente longas e sem interrupções. O material em que estou interessado tem menos de 16kb, portanto, filtrarei o arquivo pelo comprimento da linha. Aqui está o script Python que estou usando para fazer isso:
infile = open ("infile.txt" ,"r");
outfile = open ("outfile.txt","w");
for line in infile:
if len(line) < 16384:
outfile.write(line)
infile.close()
outfile.close()
Isso funciona, mas para referência futura: Há alguma encantamentos mágica de uma linha (pense awk
, sed
) que filtrar um arquivo por comprimento de linha?
awk 'length($0) < 16384' file > output
, pois a ação padrão é imprimir a linha.Isso é semelhante à resposta de Ansgar, mas um pouco mais rápido nos meus testes:
É a mesma velocidade que as outras respostas do awk. Ela se baseia no implícito
print
de uma expressão verdadeira, mas não precisa de tempo para dividir a linha como a de Ansgar.Observe que o AWK oferece um
if
de graça. O comando acima é equivalente a:Não há explícito
if
(ou seu conjunto circundante de chaves) como em algumas das outras respostas.Aqui está uma maneira de fazer isso
sed
:ou:
que exclui qualquer linha que contenha 16384 (ou mais) caracteres.
Para garantir a integridade, eis como você usaria
sed
para salvar linhas maiores que o seu limite:fonte
Você pode
awk
:Isso imprimirá as linhas com comprimento menor que 16K caracteres (16 * 1024).
Você
grep
também pode usar :Isso imprimirá as linhas com no máximo 16K caracteres.
fonte
grep
é uma boa idéia - é uma regexp simples, com certeza, mas mais computacionalmente cara do queawk
. "Um homem com problemas diz:" Vou usar expressões regulares! Agora ele tem dois problemas. " ;)awk
.Não é realmente diferente das respostas já dadas, mas é mais curto ainda:
fonte