grep gibt "Binärdatei-Übereinstimmungen (Standardeingabe)" zurück, wenn versucht wird, ein Zeichenfolgenmuster in file zu finden


71

Ich bin auf Ubuntu und habe getippt cat .bash_history | grep gitund es ist zurückgekehrt

Binärdatei (Standardeingabe) entspricht

Mein bash_historyexistiert und es gibt viele Zeilen, die damit beginnen git.

Was hat dazu geführt, dass dieser Fehler angezeigt wurde und wie kann ich ihn beheben?


Was ist die Ausgabe von file .bash_history( file ~/.bash_history)?
Heemayl

Die Ausgabe ist.bash_history: data
answerSeeker

Aus irgendeinem Grund passierte dies nur mit meinen Apache-Protokollen. danke für die
Fragen und Antworten

Antworten:


11

Vermutlich .bash_historybeginnt die Datei mit Nicht-Textdaten und grepbehandelt die Datei daher als Binärdatei. Dies wird durch die file .bash_historyAusgabe bestätigt :

.bash_history: data 

Sie können einige Bytes von Anfang an lesen, um eine übereinstimmende Ansicht zu erhalten:

head -c1K .bash_history 

Hier lese ich zuerst 1 KiB.

Sie können das STDOUT an hexdump/ ododer ähnliches leiten .


Nimmt als Randnotiz grepDateinamen als Argument, catist hier also nutzlos; mach einfach:

grep git .bash_history

Ich bin mir immer noch nicht sicher, wie head -c1k .bash_historyich das Grep- Problem lösen soll. Lies die ersten 38 Zeilen meiner .bash_history-Datei. Alles war lesbar
answerSeeker

2
@TatakaiWasumi Was ist die Ausgabe von grep -a git .bash_history?
Heemayl

1
Das hat funktioniert! Ich habe alles bekommen, was ich wollte. Was macht -adas?
answerSeeker

6
Mit @TatakaiWasumi -awird grepdie Datei als Binärdatei behandelt.
Heemayl

3
-amake grepverarbeitet eine Binärdatei so, als wäre es Text.
Lashgar

128

Sie können verwenden grep -a 'pattern'.

von man grep Seite:

-a, --text
Process a binary file as if it were text; this is equivalent to the ‘--binary-files=text’ option.

Dies hat mir geholfen, wenn ich die -zFlagge für mehrere Zeilen verwendet habe.
Stragu

Diese Antwort sollte die beste für diese Frage sein.
Michael Pacheco

Ja, diese Antwort ist viel besser geeignet!
Daywalker

3

Ich habe diese Frage heute gesehen, weil ich dasselbe Problem hatte, als ich meine Fragen beantworten wollte .bash_history. (Kleiner Hinweis: Ich habe meinen Verlauf umbenannt, sodass ein neuer erstellt wurde. Dieser neue Verlauf wurde nicht als Binärdatei behandelt.)

In @heemayls Antwort steht, dass grepDateinamen verwendet werden und catnutzlos wären. Dies ist nicht ganz richtig. Aus der grepManpage:

Wenn keine Dateien angegeben sind oder die Datei mit einem "-" versehen ist, durchsucht grep die Standardeingabe.

Sie können es also verwenden catund weiterleiten grep. Dies löst jedoch nicht das Problem, .bash_historydas als binär behandelt wird. Das einzig richtige ist es grep -a(wie in der Antwort von @AK_) zu benutzen, ob du grepdie Historie direkt oder mit catund einer Pipe schreibst .


cat .bash_history | grep -a git

oder

grep -a git .bash_history


Danke! Funktioniert gut für mich
Michael Pacheco
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.