Como remover "dados binários" de um arquivo de texto (por exemplo, bash_history)?

1

Como discutido em perguntas como:

esse grep pode parar de processar arquivos que considera binários.

Embora isso não seja um grande problema, ao pesquisar arquivos de texto, descobriu-se que algumas vezes alguns arquivos de texto estão "sujos", ou seja, contêm alguns dados binários.

Meu caso específico motivando essa questão é que, de alguma forma, alguns dados binários (para o que quer que seja considerado binário pelo grep, veja as perguntas citadas), entraram no arquivo .bash_history , gostaria de removê-lo.

Como posso remover dados binários de um arquivo de texto?

Mais do que apenas remover os dados binários, eu gostaria de poder dar uma olhada nos dados binários ofensivos (grep), para evitar a remoção de algo necessário / importante.

    
por humanityANDpeace 23.03.2017 / 20:45

2 respostas

4

cat -v .bash_history > newbashhistory

Veja o newbashhistory e decida se você gosta dele

    
por 23.03.2017 / 21:22
1

Uma maneira de visualizar as linhas que contêm dados que não são de texto é:

perl -nle 'print if m/[^ -~\t\r]/' .bash_history | hexdump -C

basicamente, imprima a linha se ela corresponder a um caractere não ( ^ ) no espaço até o intervalo til (o material imprimível, por uma revisão de ascii(7) ) e também não -text-but-okay characters (novas linhas devem ser manipuladas magicamente pelo -l flag).

Se o conteúdo binário dessas linhas parece correto destruir, então você pode excluí-los através de algo como:

perl -i.whoopsie -ple 's/[^ -~\t\r]//g' .bash_history

E então, talvez, use

cmp -l .bash_history.whoopsie .bash_history

para verificar se os binários corretos foram destruídos.

    
por 23.03.2017 / 21:28

Tags