cat -v .bash_history > newbashhistory
Veja o newbashhistory e decida se você gosta dele
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.
cat -v .bash_history > newbashhistory
Veja o newbashhistory e decida se você gosta dele
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.