Entspricht dem Befehl grep für Binärdateien

24

Ich habe eine Reihe von Binärdateien und ich weiß, dass es in diesen Binärdateien Zeichenfolgen gibt, die ich finden möchte.

Ich möchte Folgendes tun:

grep -lir "the string I am looking for"

und eine Liste aller Binärdateien in einem bestimmten Verzeichnis abrufen, die diese Zeichenfolge enthalten, aber grep -liranscheinend nicht mit diesen Dateien funktionieren.

Gibt es einen Befehl, der diese Art der Suche vom Terminal aus ausführen kann?

Weltraumhund
quelle

Antworten:

24

Mit GNU grep können Sie die Option -a verwenden , um Binärdateien als Textdateien zu behandeln:

grep -ali -- string file

Wenn Ihre grep-Version nicht unterstützt -a, können Sie stattdessen ack verwenden. Bei ack 1.x müssen Sie die -aOption einschließen , bei ack 2.x ist dies nicht der Fall, da bei der Suche standardmäßig Nicht-Text-Dateien einbezogen werden (Nicht-Text-Dateien werden nur ignoriert, wenn Sie keine Dateien angegeben haben).

cuonglm
quelle
Verstehe ich ackdie Selbstbeschreibung falsch ? (im Handbuch) "ack 2.x durchsucht jede reguläre, nicht-binäre Datei, die nicht explizit ignoriert wird [von blah blah]" Es hört sich also so an, als ob ack 2.x das Lesen einer Datei immer noch vorzeitig beenden sollte, wenn der Inhalt angezeigt wird binär.
Peter Cordes
1
@PeterCordes: Dies ist aufgetreten, als keine Dateien ausgewählt wurden. Versuchen ack grep /bin/grepSie es und Sie erhalten das Ergebnis. Ich habe meine Antwort aktualisiert, um Verwirrung zu vermeiden.
Dienstag,
1
Verwenden Sie den Befehl strings, um die Zeichenfolgen aus Ihrer Binärdatei abzurufen.
Uwe Burger
23

Der Befehl stringsextrahiert alle ASCII-Daten aus einer Datei. Wenn Sie diese dann grepausgeben, können Sie nach Ihren Daten suchen:

strings <filename> | grep "search text"
NZD
quelle
Dies sollte die akzeptierte Antwort sein. Diese Binärdatei ist für diese Aufgabe gut geeignet.
Vladislavs Dovgalecs
5
@xeon: Es ist nicht immer gut zu benutzen strings, lesen Sie hier für weitere Details.
Cuonglm
1
Da das Ziel darin besteht, festzustellen, welche Binärdateien die Zeichenfolge enthalten, strings -fwäre dies angemessener.
Jamesdlin
Das ist eine bessere Antwort.
Xofo
9

Bei Ihrer Frage geht es darum, Binärdateien zu finden, die ein Muster enthalten (und wir haben bereits sehr gute Antworten!). Ergänzend möchten wir vielleicht die Vorkommen besorgen.

Ich benutze oft

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

einen umgebenden Kontext von 20-Zeichen zu bekommen.

Joao
quelle