grep restituisce "Corrispondenze file binari (input standard)" quando si cerca di trovare un modello di stringa nel file


71

Sono su Ubuntu e ho digitato cat .bash_history | grep gited è tornato

Corrispondenza del file binario (input standard)

Il mio bash_historyesiste e ci sono molte righe che iniziano con git.

Cosa ha causato la visualizzazione di questo errore e come posso ripararlo?


Qual è l'output di file .bash_history( file ~/.bash_history)?
heemayl

l'output è.bash_history: data
answerSeeker

per qualche motivo questo stava accadendo con i miei log di Apache. grazie per il q & a
billynoah

Risposte:


11

Presumibilmente il file .bash_historyinizia con dati non testuali, quindi greptratta il file come binario. Ciò è confermato file .bash_historydall'output:

.bash_history: data 

Puoi leggere alcuni byte dall'inizio per avere una vista conforme:

head -c1K .bash_history 

Qui sto leggendo il primo 1 KiB.

È possibile reindirizzare STDOUT a hexdump/ odo simili.


Come nota a margine, grepprende il nome dei file come argomento, quindi catè inutile qui; basta fare:

grep git .bash_history

Non sono ancora sicuro di come risolvere il problema con grep, head -c1k .bash_historyleggi le prime 38 righe del mio file .bash_history. Tutto era leggibile
risposta Cercatore

2
@TatakaiWasumi Qual è l'output di grep -a git .bash_history?
heemayl

1
Ha funzionato! Ho ottenuto tutto ciò che volevo da esso. Cosa fa -a?
risposta Cercatore

6
@TatakaiWasumi -afa greptrattare il file come binario.
heemayl

3
-arendere grepprocesso un file binario come se fosse testo.
Lashgar,

128

È possibile utilizzare grep -a 'pattern'.

dalla pagina man grep :

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

Questo mi ha aiutato quando ho usato la -zbandiera per abbinare più linee.
Stragu,

Questa risposta dovrebbe essere la migliore per questa domanda.
Michael Pacheco,

Sì, questa risposta è molto più adatta!
Daywalker,

3

Ho visto questa domanda oggi, perché ho avuto lo stesso problema quando volevo greppare il mio .bash_history. (Piccola nota: ho rinominato la mia cronologia, in modo che ne sia stata creata una nuova. Questa nuova cronologia non è stata trattata come un file binario.)

Nella risposta di @heemayls si afferma che grepprende nomi di file e catsarebbe inutile. Questo non è del tutto vero. Dalla greppagina man di s:

Se non viene specificato alcun file o se viene fornito il file “-”, grep cerca l'input standard.

Quindi puoi usarlo cate convogliarlo grep. Tuttavia, questo non risolve il problema che .bash_historyviene trattato come binario. L'unica cosa giusta è usare grep -a(come nella risposta di @AK_) sia grepla cronologia direttamente o con cate una pipe.


cat .bash_history | grep -a git

o

grep -a git .bash_history


Grazie! Funziona bene per me
Michael Pacheco,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.