Am „m pe Ubuntu și am tastat cat .bash_history | grep git
și a revenit
Fișierul binar (intrare standard) se potrivește
bash_history
există și există multe linii în el care începe cu git
.
Ce a cauzat afișarea acestei erori și cum o pot remedia?
Comentarii
Răspuns
Presuma bly fișierul .bash_history
începe cu date non-text, prin urmare grep
tratează fișierul ca binar. Acest lucru este confirmat de ieșirea file .bash_history
:
.bash_history: data
Puteți citi câțiva octeți de la început pentru a avea o conformitate vizualizare:
head -c1K .bash_history
Aici citesc primul 1 KiB.
Puteți conecta STDOUT la hexdump
/ od
sau similar.
Ca notă laterală, grep
ia numele de fișier ( s) ca argument, deci cat
este inutil aici; încercați acest lucru:
grep git .bash_history
Comentarii
- I ' Nu sunt încă sigur cum să rezolv problema grep,
head -c1k .bash_history
citiți primele 38 de rânduri ale fișierului meu .bash_history. Totul era lizibil - @TatakaiWasumi Care este rezultatul
grep -a git .bash_history
? - A funcționat! Am primit tot ce mi-am dorit. Ce face
-a
? - @TatakaiWasumi
-a
facegrep
pentru a trata fișierul ca fiind binar. -
-a
facețigrep
procesați un fișier binar ca și cum ar fi text.
Răspuns
Puteți utiliza grep -a "pattern"
.
din pagina grep :
-a, –text
Procesați un fișier binar ca și cum ar fi text; acest lucru este echivalent cu opțiunea –binary-files = text .
Comentarii
- Acest lucru m-a ajutat când folosesc steagul
-z
pentru a se potrivi pe mai multe linii. - A funcționat pentru mine, dar totuși ciudat deoarece fișierul meu nu este ' un fișier binar. [grid @ serverdg2 trace] $ file listener.log listener.log: data
Răspuns
Am avut aceeași problemă atunci când vreau să-mi grep .bash_history
. (Mică notă: mi-am redenumit istoricul, astfel încât s-a creat unul nou. Această nouă istorie nu a fost tratată ca un binar.)
În răspunsul @heemayls se afirmă, că „>
ia nume de fișiere și cat
ar fi inutil. Acest lucru nu este în întregime adevărat. Din pagina de manual a grep
:
Dacă nu sunt specificate fișiere sau dacă fișierul „-” este dat, grep caută intrări standard.
Deci, puteți utiliza cat
și introduceți-l în grep
. Cu toate acestea, acest lucru nu rezolvă problema că .bash_history
este tratat ca un binar. Singurul lucru corect este să folosiți grep -a
(Ca în răspunsul de la @AK_) indiferent dacă grep
istoricul este direct sau cu cat
și o conductă.
cat .bash_history | grep -a git
sau
grep -a git .bash_history
Răspuns
Eroarea se datorează faptului că datele din fișier sunt binare, puteți utiliza comanda șiruri pentru a vedea citirea umană (adică strings
) parte pe care ați căuta în mod normal folosind grep
strings data | grep -i whatever
Comentarii
- Aceasta nu se referă la prima parte a întrebării, adică " ce cauzează problema ".
Răspuns
Acest lucru poate fi cauzat de octeți nuli în istoricul dvs. bash. Eliminarea liniilor cu caractere nule poate rezolva problema. Puteți să le verificați folosind modul grep „s Perl-regexp:
grep -Pa "\x00" .bash_history
Această postare are sugestii pentru sisteme non-unix.
file .bash_history
(file ~/.bash_history
)?.bash_history: data