如何从文本文件(例如bash_history)中删除“二进制数据”?

如何从文本文件(例如bash_history)中删除“二进制数据”?

就像在以下问题中讨论的那样:

grep 可能会停止处理它认为是二进制的文件。

虽然这通常不是一个大问题,但在搜索文本文件时,事实证明,有时某些文本文件是“脏”的,即包含一些二进制数据。

我提出这个问题的具体情况是,不知何故,一些二进制数据(无论 grep 认为是二进制的,请参阅引用的问题)进入了文件.bash_history,我想将其删除。

如何从文本文件中删除二进制数据?

不仅仅是删除二进制数据,我很高兴能够查看什么是有问题的(对 grep )二进制数据,以避免删除需要/重要的东西。

答案1

cat -v .bash_history > newbashhistory

查看 newbashhistory 并决定是否喜欢它

答案2

查看包含非文本数据的行的一种方法是:

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

基本上打印该行,如果它匹配一个字符不是( ^) 在空格到波形符范围内(可打印的内容,根据 的评论ascii(7)),也不是其他一些非文本但还可以的字符(换行符应该由标志神奇地处理-l)。

如果这些行的二进制内容看起来可以销毁,那么您可以通过以下方式删除它们:

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

然后也许使用

cmp -l .bash_history.whoopsie .bash_history

验证正确的二进制文件已被销毁。

相关内容