grep
のマンページでは、-I
フラグについて次のように説明しています。 :
-I Ignore binary files. This option is equivalent to --binary-file=without-match option.
バイナリファイルについてもこれを示しています:
--binary-files=value Controls searching and printing of binary files. Options are binary, the default: search binary files but do not print them; without-match: do not search binary files; and text: treat all files as text.
考えられませんバイナリファイルの一致を気にするシナリオの例です。そのようなシナリオが存在する場合、それは確かに標準ではなく例外であるに違いありません。 grep
がデフォルトでバイナリファイルを無視するのではなく、このフラグを設定する必要がないのはなぜですか?
コメント
回答
grepがバイナリファイルと見なすものすべてが、実際にはバイナリファイルであるとは限りません。例えばpuppetのログにはansiカラーコーディングが含まれているため、grepはそれらをバイナリであると見なします。 / var / logをgrepしている場合でも、それらを検索したいと思います。
コメント
- PDFファイルについても同じことが言えます。
- +歴史的にgrepはそれを行うことができなかったので、互換性のためだけに、デフォルトはすべてを含む必要があります。
- @OlivierDulacそれは理にかなっています、そうでなければバイナリファイルを無視することはデフォルト。
回答
grep
の検索機能バイナリファイルは、プログラムをコンパイルしているときに、リンカー(ld
)が一部の関数が見つからないと文句を言うときにも役立ちます。
grep function_name /lib/lib*
のようなコマンドを使用して、それを含むライブラリを見つけることができます。 (ライブラリはバイナリファイルです。)
コメント
- その場合は、'を使用します。
grep -l function_name /lib/lib*
またはnm -Do /lib/lib* | grep function_name
またはldconfig -p | grep -o '/.*/lib.*' | xargs nm -Do | grep function_name
です。 - そうですね、
grep some_function /lib/*
は短く、通常は正解です。探しているライブラリの名前です。しかし、はい、時にはあなたのようなより洗練されたアプローチも必要になります。
GREP_OPTIONS
を好みの設定に設定できます。そうすれば、'多くのコマンドラインスイッチを使用する必要がなくなります。 。.(ba|z|foo)shrc':
エイリアスgrep =grep -I " `。