次の質問で議論されているとおりです。
grepはバイナリと思われるファイルの処理を中止できます。
これは一般的に大きな問題ではありませんが、テキストファイルを検索すると、一部のテキストファイルが「汚れている」ことがわかります。つまり、一部のバイナリデータが含まれている場合です。
私がこの質問をする具体的な状況は、何らかの方法でいくつかのバイナリデータ(grepがバイナリであると思われるものは何でも参照されている質問を参照)がファイルに入って.bash_history
削除したいということです。
テキストファイルからバイナリデータを削除する方法は?
バイナリデータを削除するよりも、バイナリデータに問題があることを確認(grep)して、必要な項目や重要な項目を削除しないようにしたいと思います。
答え1
cat -v .bash_history > newbashhistory
newbashhistoryをチェックし、お気に入りを決定します。
答え2
テキスト以外のデータを含む行を表示する1つの方法は次のとおりです。
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
正しいバイナリが削除されていることを確認してください。