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_OPTIONSを好みの設定に設定できます。そうすれば、'多くのコマンドラインスイッチを使用する必要がなくなります。 。
  • このような変数をサポートしない他のコマンドに関する注意:.(ba|z|foo)shrc': エイリアスgrep =

    grep -I " `。

  • これは実際には非常に便利です。たとえば、ユニティバージョンを探していました。プロジェクトの、'どのファイルに保存されているか思い出せませんでした。バージョンの形式を検索したところ、一致するバイナリファイルがいくつか見つかりました。バージョン5より前のバージョンであるため、バージョンはバイナリファイルにのみ存在していたため、バイナリの一致がなければ、見逃していた可能性があります。
  • FYI Ther e 'ツール ack は、"よりも優れていますgrep "。 Ackは'バイナリファイルを検索しません。 Debianでは、" ack-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/*は短く、通常は正解です。探しているライブラリの名前です。しかし、はい、時にはあなたのようなより洗練されたアプローチも必要になります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です