Ich habe eine Reihe von Binärdateien und weiß, dass in diesen Binärdateien Zeichenfolgen vorhanden sind, die ich finden möchte.
Ich möchte Folgendes ausführen:
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 -lir
funktioniert anscheinend nicht mit diesen Dateien.
Gibt es einen Befehl, der diese Art der Suche vom Terminal aus durchführen kann?
Antwort
Mit GNU grep Sie können die Option -a verwenden, um Binärdateien als Textdateien zu behandeln:
grep -ali -- string file
Wenn Ihre grep-Version -a
nicht unterstützt, können Sie ack stattdessen. Mit ack 1.x müssen Sie die Option -a
einschließen, mit ack 2.x nicht, da bei der Suche standardmäßig Nicht-Text-Dateien enthalten sind (nur ignoriert Nicht-Textdateien) Textdatei, wenn Sie keine Dateien angegeben haben).
Kommentare
- Verstehe ich
ack
' s Selbstbeschreibung? (im Handbuch) " ack 2.x durchsucht jede reguläre, nicht-binäre Datei, die es nicht ist explizit ignoriert [von bla bla] " Es hört sich also so an, als ob ack 2.x das Lesen einer Datei immer noch vorzeitig beenden sollte, wenn der Inhalt binär aussieht. - @PeterCordes: Das ' ist aufgetreten, als keine Dateien ausgewählt wurden. Versuchen Sie
ack grep /bin/grep
und Sie erhalten das Ergebnis. Ich habe meine Antwort aktualisiert, um Verwirrung zu vermeiden. - Versuchen Sie, mit dem Befehl strings die Zeichenfolgen aus Ihrer Binärdatei abzurufen.
Antwort
Der Befehl strings
wird extr Alle ASCII-Daten aus einer Datei bearbeiten. Wenn Sie dann grep
ausgeben, können Sie nach Ihren Daten suchen:
strings <filename> | grep "search text"
Kommentare
- Dies sollte die akzeptierte Antwort sein. Diese Binärdatei eignet sich gut für diese Aufgabe.
- @xeon: ' ist nicht immer gut für die Verwendung von
strings
Lesen Sie hier , um weitere Informationen zu erhalten. - Da das Ziel darin besteht, zu bestimmen, welche Binärdateien die Zeichenfolge enthalten,
strings -f
wäre angemessener. - Dies ist eine bessere Antwort.
- die beste Antwort. Vielen Dank
Antwort
Bei Ihrer Frage geht es darum, Binärdateien zu finden, die ein Muster enthalten (und das haben wir bereits sehr gute Antworten!). Ergänzend möchten wir vielleicht die Vorkommen erhalten.
Ich verwende oft
grep -aPo ".{0,20}pattern.{0,20}" binfile
, um einen umgebenden Kontext von 20 Zeichen zu erhalten.