バイナリがたくさんあり、これらのバイナリの中に検索したい文字列があることを知っています。

次のことを実行したい:

grep -lir "the string I am looking for" 

特定のディレクトリ内で、その文字列を含むがは明らかにこれらのファイルを処理していません。

端末からこの種の検索を実行できるコマンドはありますか?

回答

With GNU grep の場合、 -a オプションを使用して、バイナリファイルをテキストファイルとして扱うことができます。

grep -ali -- string file 

grepバージョンが-aをサポートしていない場合は、 ack 。 ack 1.xでは、-aオプションを含める必要がありますが、ack 2.xでは、デフォルトで非テキストファイルを検索するときに含まれます(非テキストファイルは無視されます)。ファイルを指定しなかった場合のテキストファイル)。

コメント

  • 誤読しているack 'の自己記述?(マニュアル内)" ack 2.xは、そうでないすべての通常の非バイナリファイルを検索します明示的に無視された[byblah blah] "したがって、内容がバイナリに見える場合でも、ack2.xはファイルの読み取りを早期に停止する必要があるようです。
  • @PeterCordes: 'は、ファイルが選択されていないときに発生しました。ack grep /bin/grepを試してみると、結果が得られます。混乱を避けるために、回答を更新しました。
  • stringsコマンドを使用してバイナリから文字列を取得してみてください。

回答

コマンドstringsはextrファイルからすべてのASCIIデータを処理し、その出力をgrepすると、データを検索できます。

strings <filename> | grep "search text" 

コメント

  • これは受け入れられた答えであるはずです。このバイナリはこのタスクに適しています。
  • @xeon:'は必ずしもstringsを使用するとは限りません。 、詳細については、こちらをお読みください。
  • 目標はどのバイナリに文字列が含まれているかを判断することなので、strings -fの方が適切です。
  • これがより良い答えです。
  • 最良の答えです。どうもありがとうございました

回答

あなたの質問は、パターンを含むバイナリファイルを見つけることです(そして私たちはすでに非常に良い答えです!)。補足として、オカレンスを取得したい場合があります。

私はよく使用します

grep -aPo ".{0,20}pattern.{0,20}" binfile 

20文字の周囲のコンテキストを取得します。

コメントを残す

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