grep returnează “ Fișierul binar (intrare standard) se potrivește cu ” atunci când încercați să găsiți un șir de caractere în fișierul

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

  • Care este rezultatul file .bash_history (file ~/.bash_history)?
  • ieșirea este .bash_history: data
  • din anumite motive acest lucru se întâmpla doar cu jurnalele mele apache. mulțumesc pentru q & a
  • foarte strâns legat: unix.stackexchange.com/q/19907/5510

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 face grep pentru a trata fișierul ca fiind binar.
  • -a faceți grep 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.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *