テキストである必要があるバイナリファイルがあります(それらはエクスポートされたログです)。それ以下では開くことができません(見栄えが悪い-バイナリファイルのように見えます)。私はそれをviで開くことができ、猫を付けることができることを発見しました(実際のログが表示されます)が、実際に実行したいのは、それらをgrepすることです(viでそれぞれを開いてから実行する必要はありません)検索)。それを行う方法はありますか?
とにかくgrep
を使用してファイルを検索できます。入力ファイルが本当にテキストかどうかは関係ありません。 「man grep」から:
-a, --text
Process a binary file as if it were text; this is equivalent to the --binary-files=text option.
--binary-files=TYPE
If the first few bytes of a file indicate that the file contains binary data, assume that the file is
of type TYPE. By default, TYPE is binary, and grep normally outputs either a one-line message saying
that a binary file matches, or no message if there is no match. If TYPE is without-match, grep assumes
that a binary file does not match; this is equivalent to the -I option. If TYPE is text, grep
processes a binary file as if it were text; this is equivalent to the -a option. Warning: grep
--binary-files=text might output binary garbage, which can have nasty side effects if the output is a
terminal and if the terminal driver interprets some of it as commands.
2番目の段落の最後に注意事項を記入してください。 grepの結果を新しいファイルにリダイレクトし、vi/lessでこれを調べることができます。
パイプラインしてstrings
を実行します。これにより、すべてのバイナリコードが削除され、テキストのみが残ります。
次の3つのコマンドを使用できます。
grep -a <sth> file.txt
cat -v file.txt | grep <sth>
cat file.txt | tr '[\000-\011\013-\037\177-\377]' '.' | grep <sth>
Grep 2.21以降、バイナリファイルは 別の方法で処理されます :
バイナリデータを検索するとき、grepはテキスト以外のバイトを行末記号として扱うようになりました。これにより、パフォーマンスが大幅に向上します。
つまり、バイナリデータでは、すべての非テキストバイト(改行を含む)が行ターミネータとして扱われます。この動作を変更する場合は、次のことができます。
使用する --text
。これにより、改行のみが行末記号になります。
使用する --null-data
。これにより、nullバイトのみが行ターミネーターになります。