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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.