Die Manpage für grep
beschreibt das Flag -I
wie folgt :
-I Ignore binary files. This option is equivalent to --binary-file=without-match option.
Dies sagt auch über Binärdateien aus:
--binary-files=value Controls searching and printing of binary files. Options are binary, the default: search binary files but do not print them; without-match: do not search binary files; and text: treat all files as text.
Ich kann nicht denken eines Szenarios, in dem ich mich um Übereinstimmungen in Binärdateien kümmern würde. Wenn ein solches Szenario existiert, muss es sicherlich eher die Ausnahme als die Norm sein. Warum ignoriert „t grep
Binärdateien standardmäßig nicht, anstatt dieses Flag zu setzen?
Kommentare
- Sie können die Variable
GREP_OPTIONS
auf Ihre bevorzugten Einstellungen setzen, dann müssen Sie ' nicht so viele Befehlszeilenoptionen verwenden - Ein Hinweis für andere Befehle, die eine solche Variable nicht unterstützen: Sie können Standardoptionen festlegen, indem Sie einen Alias in Ihrem
.(ba|z|foo)shrc':
Alias grep = " grep -I " `. - Dies kann tatsächlich sehr nützlich sein. Ich habe beispielsweise nach der Unity-Version gesucht Ich konnte nicht ' merken, in welcher Datei es aufbewahrt wurde. Ich suchte nach dem Format der Version und fand einige passende Binärdateien. Es stellte sich heraus Da es sich um Vorversion 5 handelte, war die Version nur in einer Binärdatei vorhanden. Ohne die binäre Übereinstimmung hätte ich sie möglicherweise übersehen.
- FYI Ther e ' ist ein Tool ack , das " besser ist als grep ". Ack durchsucht ' keine Binärdateien. In Debian kommt es unter dem Namen " ack-grep ".
Antwort
Nicht alles, was grep für eine Binärdatei hält, ist tatsächlich eine Binärdatei. z.B. Die Protokolle der Puppen enthalten eine Ansi-Farbcodierung, was grep glauben lässt, dass sie binär sind. Ich möchte sie trotzdem durchsuchen, wenn ich / var / log durchsuche.
Kommentare
- Das Gleiche gilt für PDF-Dateien wie gut.
- + historisch gesehen konnte grep das NICHT tun, daher muss die Standardeinstellung nur aus Kompatibilitätsgründen allumfassend sein.
- @OlivierDulac ist sinnvoll, andernfalls sollte das Ignorieren von Binärdateien die sein Standard.
Antwort
grep
Suchfähigkeit Binärdateien sind auch nützlich, wenn ich ein Programm kompiliere und der Linker (ld
) sich darüber beschwert, dass eine Funktion nicht gefunden wurde. Ich kann einen Befehl wie
grep function_name /lib/lib*
verwenden, um die Bibliothek zu finden, die ihn enthält. (Bibliotheken sind Binärdateien.)
Kommentare
- In diesem Fall würden Sie ' lieber verwenden
grep -l function_name /lib/lib*
odernm -Do /lib/lib* | grep function_name
oderldconfig -p | grep -o '/.*/lib.*' | xargs nm -Do | grep function_name
. - Nun,
grep some_function /lib/*
ist kürzer und gibt normalerweise die richtige Antwort – Name der Bibliothek, nach der ich suche. Aber ja, manchmal ist auch ein ausgefeilterer Ansatz wie der Ihre erforderlich.