So unterdrücken Sie den Abgleich von Binärdateien in grep [geschlossen]

215

Bei Verwendung grepunter Linux enthält das Ergebnis häufig viele "XXX-Übereinstimmungen für Binärdateien", die mir egal sind. Wie kann man diesen Teil der Ergebnisse unterdrücken oder Binärdateien in grep ausschließen?

RandyTek
quelle
12
grep -I .........
1
@skwllsp Bei -l enthalten die Ergebnisse jedoch nicht die übereinstimmende Zeile, sondern nur den übereinstimmenden Dateinamen.
RandyTek
Es gibt eine Option für Zeilen: grep -I -n -H
6
Das ist nicht zum Thema? Wow
CoffeeTableEspresso

Antworten:

301

Es gibt drei Optionen, die Sie verwenden können. -Iist, Binärdateien in grep auszuschließen. Andere sind für Zeilennummern und Dateinamen.

grep -I -n -H 


-I -- process a binary file as if it did not contain matching data; 
-n -- prefix each line of output with the 1-based line number within its input file
-H -- print the file name for each match

Dies könnte also eine Möglichkeit sein, grep auszuführen:

grep -InH your-word *
Benutzer184968
quelle
das funktioniert. Thx @skwllsp
RandyTek
7
Ich würde verwenden, -Irnwo rfür rekursiv steht, um in alle Ordner zu schauen. Hist hier exsessiv
vladkras
@vladkras, "H ist hier exsessiv" - du meinst redundant, dh es ist bereits die Standardeinstellung?
cp.engr
Vielen Dank, dass Sie klargestellt haben, was die kurzen Optionen in Ihrer Antwort bedeuten. Es gibt so viele knappe Linux-Befehlsantworten auf SO, die keine Erklärung geben, was ich ärgerlich finde.
Jrahhali
1
@AaronFranke: Das -nFlag weist grep an, die Zeilennummern der Dateien zu melden, in denen eine Übereinstimmung gefunden wurde. "1-basiert" bedeutet, dass die Zeilenzählung eher bei Eins als bei Null beginnt, wie dies bei der Programmierung häufig der Fall ist. Also, wenn die erste Zeile der Datei mit dem Namen example.txtist Hello, world, ist die zweite Zeile Hello catund die dritte Zeile cats are cool, dann die Suche nach „Katze“ über grep -n cat example.txt, würden Sie bekommen example.txt:2: Hello catund example.txt:3: cats are cool.
Jvriesem
11

Dies ist eine alte Frage, die beantwortet wurde, aber ich dachte, ich würde die Option --binary-files = text hier für jeden einfügen, der sie verwenden möchte. Die Option -I ignoriert die Binärdatei. Wenn Sie jedoch möchten, dass grep die Binärdatei als Textdatei behandelt, verwenden Sie --binary-files = text wie folgt:

bash$ grep -i reset mediaLog*
Binary file mediaLog_dc1.txt matches
bash$ grep --binary-files=text -i reset mediaLog*
mediaLog_dc1.txt:2016-06-29 15:46:02,470 - Media [uploadChunk  ,315] - ERROR - ('Connection aborted.', error(104, 'Connection reset by peer'))
mediaLog_dc1.txt:ConnectionError: ('Connection aborted.', error(104, 'Connection reset by peer'))
bash$
amadain
quelle