Ich bin auf Ubuntu und habe getippt cat .bash_history | grep git
und es ist zurückgekehrt
Binärdatei (Standardeingabe) entspricht
Mein bash_history
existiert 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?
file .bash_history
(file ~/.bash_history
)?.bash_history: data
Antworten:
Vermutlich
.bash_history
beginnt die Datei mit Nicht-Textdaten undgrep
behandelt die Datei daher als Binärdatei. Dies wird durch diefile .bash_history
Ausgabe bestätigt :Sie können einige Bytes von Anfang an lesen, um eine übereinstimmende Ansicht zu erhalten:
Hier lese ich zuerst 1 KiB.
Sie können das STDOUT an
hexdump
/od
oder ähnliches leiten .Nimmt als Randnotiz
grep
Dateinamen als Argument,cat
ist hier also nutzlos; mach einfach:quelle
head -c1k .bash_history
ich das Grep- Problem lösen soll. Lies die ersten 38 Zeilen meiner .bash_history-Datei. Alles war lesbargrep -a git .bash_history
?-a
das?-a
wirdgrep
die Datei als Binärdatei behandelt.-a
makegrep
verarbeitet eine Binärdatei so, als wäre es Text.Sie können verwenden
grep -a 'pattern'
.von man grep Seite:
quelle
-z
Flagge für mehrere Zeilen verwendet habe.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
grep
Dateinamen verwendet werden undcat
nutzlos wären. Dies ist nicht ganz richtig. Aus dergrep
Manpage:Sie können es also verwenden
cat
und weiterleitengrep
. Dies löst jedoch nicht das Problem,.bash_history
das als binär behandelt wird. Das einzig richtige ist esgrep -a
(wie in der Antwort von @AK_) zu benutzen, ob dugrep
die Historie direkt oder mitcat
und einer Pipe schreibst .cat .bash_history | grep -a git
oder
grep -a git .bash_history
quelle