grepバイナリファイルと同等のコマンド


24

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

私はしたい:

grep -lir "the string I am looking for"

そして、その文字列を含む特定のディレクトリ内のすべてのバイナリのリストを取得しますがgrep -lir、明らかにこれらのファイルで動作していません。

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

回答:


24

ではGNU grepのは、使用することができます-a、それはテキストファイルとしてバイナリファイルを扱う作るためのオプションを:

grep -ali -- string file

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


ackの自己説明を読み間違えていますか?(マニュアルで)「ack 2.xは、明示的に無視されないすべての通常の非バイナリファイルを検索します[by blah blah]」ですから、ack 2.xは、コンテンツが見える場合、ファイルの読み取りを早期に停止するようです。バイナリ。
ピーターコーデス

1
@PeterCordes:ファイルが選択されていない場合に発生します。試してみるack grep /bin/grepと、結果が得られます。混乱を防ぐために回答を更新しました。
cuonglm

1
文字列コマンドを使用して、バイナリから文字列を取得してみてください。
ウーバーガー

23

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

strings <filename> | grep "search text"

これは受け入れられた答えでなければなりません。このバイナリは、このタスクに適しています。
ヴラディスラフドヴガレス

5
@xeon:使用することが必ずしも良いとは限りません。詳細についてはこちらをおstrings読みください。
cuonglm

1
目的はどのバイナリに文字列が含まれているかを判断strings -fすることなので、より適切です。
ジェームズドリン

これはより良い答えです。
Xofo

9

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

よく使う

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.