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?

answerSeeker
quelle
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
sehr eng verbunden: unix.stackexchange.com/q/19907/5510
Trevor Boyd Smith

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
heemayl
quelle
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.
AK_
quelle
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

SSCMuchacho
quelle
Danke! Funktioniert gut für mich
Michael Pacheco