Come eliminare i risultati della corrispondenza dei file binari in grep [chiuso]


215

Quando si utilizza grepin Linux, il risultato spesso contiene molte "corrispondenze di file binari XXX", di cui non mi interessa. Come sopprimere questa parte dei risultati o come escludere i file binari in grep?


12
grep -I .........

1
@skwllsp Ma con -l, i risultati non contengono la riga corrispondente, ma solo con il nome file corrispondente.
RandyTek,

C'è un'opzione per le linee: grep -I -n -H

6
Questo è fuori tema? Wow
CoffeeTableEspresso

Risposte:


302

Esistono tre opzioni che è possibile utilizzare. -Iè di escludere file binari in grep. Altri sono per numeri di riga e nomi di file.

grep -I -n -H 


-I -- process a binary file as if it did not contain matching data; 
-n -- prefix each line of output with the 1-based line number within its input file
-H -- print the file name for each match

Quindi questo potrebbe essere un modo per eseguire grep:

grep -InH your-word *

questo funziona. Thx @skwllsp
RandyTek,

7
Userei -Irndove rsta ricorsivo per guardare dentro tutte le cartelle. Hè eccessivo qui
Vladkras,

@vladkras, "H è eccessivo qui" - intendi ridondante, ovvero è già l'impostazione predefinita?
cp.engr

Grazie per aver chiarito cosa significano le opzioni brevi nella tua risposta. Ci sono così tante risposte al comando Linux su SO che non danno alcuna spiegazione, cosa che trovo fastidiosa.
jrahhali,

1
@AaronFranke: la -nbandiera dice a grep di riportare il numero di riga dei file in cui ha trovato una corrispondenza. "1-based" significa che il conteggio delle righe inizia da uno anziché da zero, come spesso accade in programmazione. Quindi, se la prima riga del file di nome example.txtè Hello, world, la seconda linea è Hello cat, e la terza linea è cats are cool, quindi alla ricerca di "gatto" via grep -n cat example.txt, ti aspetteresti example.txt:2: Hello cate example.txt:3: cats are cool.
jvriesem,

11

Questa è una vecchia domanda a cui è stata data risposta ma ho pensato di mettere qui l'opzione --binary-files = text per chiunque voglia usarla. L'opzione -I ignora il file binario ma se vuoi che grep tratti il ​​file binario come un file di testo usa --binary-files = text in questo modo:

bash$ grep -i reset mediaLog*
Binary file mediaLog_dc1.txt matches
bash$ grep --binary-files=text -i reset mediaLog*
mediaLog_dc1.txt:2016-06-29 15:46:02,470 - Media [uploadChunk  ,315] - ERROR - ('Connection aborted.', error(104, 'Connection reset by peer'))
mediaLog_dc1.txt:ConnectionError: ('Connection aborted.', error(104, 'Connection reset by peer'))
bash$
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.