Warum ignoriert grep Binärdateien nicht standardmäßig?

94

Die Manpage für grepbeschreibt das -IFlag wie folgt:

-I      Ignore binary files.  This option is equivalent to 
        --binary-file=without-match option.

Dies gilt auch für Binärdateien:

 --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 mir kein Szenario vorstellen, in dem mir Übereinstimmungen in Binärdateien wichtig sind. Wenn es ein solches Szenario gibt, muss es sicherlich eher die Ausnahme als die Norm sein. Warum werden grepBinärdateien nicht standardmäßig ignoriert, anstatt dass das Setzen dieses Flags erforderlich ist?

Braiam
quelle
4
Sie können die Variable GREP_OPTIONSauf Ihre bevorzugten Einstellungen einstellen , dann müssen Sie nicht so viele Befehlszeilenoptionen verwenden.
Marco
2
Ein Hinweis für andere Befehle, die eine solche Variable nicht unterstützen: Sie können Standardoptionen festlegen, indem Sie in Ihrem .(ba|z|foo)shrc': Alias ​​grep = "grep -I" ` einen Alias ​​definieren .
Erik
1
Dies kann tatsächlich sehr nützlich sein. Zum Beispiel suchte ich nach der Unity-Version eines Projekts und konnte mich nicht erinnern, in welcher Datei es gespeichert war. Ich suchte nach dem Format der Version und fand einige passende Binärdateien. Es stellte sich heraus, dass die Version vor Version 5 nur in einer Binärdatei vorhanden war. Ohne die binäre Übereinstimmung hätte ich sie möglicherweise verpasst.
Svend Hansen
Zu Ihrer Information Es gibt eine Tool- Bestätigung, die irgendwie "besser als grep" ist. Ack durchsucht keine Binärdateien. In Debian kommt es unter dem Namen "ack-grep".
Teika Kazura

Antworten:

91

Nicht alles, was grep für eine Binärdatei hält, ist tatsächlich eine Binärdatei. Beispiel: Puppenlogs enthalten eine Ansi-Farbcodierung, die grep für binär hält. Ich würde sie trotzdem durchsuchen wollen, wenn ich durch / var / log greife.

Dennis Kaarsemaker
quelle
4
Gleiches gilt auch für PDF-Dateien.
Joseph R.
12
+ Historisch gesehen konnte grep das NICHT, daher muss aus Kompatibilitätsgründen standardmäßig All-Inclusive sein.
Olivier Dulac
2
@OlivierDulac ist sinnvoll, sonst sollte das Ignorieren von Binärdateien die Standardeinstellung sein.
Dagang
5

grepDie Möglichkeit, nach Binärdateien zu suchen, ist auch nützlich, wenn ich ein Programm kompiliere und der Linker ( ld) sich darüber beschwert, dass eine Funktion nicht gefunden wird. Ich kann einen Befehl wie verwenden

grep Funktionsname / lib / lib *

um die Bibliothek zu finden, die sie enthält. (Bibliotheken sind Binärdateien.)

Daniel Frużyński
quelle
In diesem Fall verwenden Sie lieber grep -l function_name /lib/lib*oder nm -Do /lib/lib* | grep function_nameoder ldconfig -p | grep -o '/.*/lib.*' | xargs nm -Do | grep function_name.
Stéphane Chazelas
Gut grep some_function /lib/*ist kürzer und gibt normalerweise korrekte Antwort - Name der Bibliothek, die ich suche. Aber ja, manchmal ist auch ein ausgefeilterer Ansatz erforderlich.
Daniel Frużyński,