Cómo suprimir resultados de coincidencia de archivos binarios en grep [cerrado]

215

Cuando se usa grepen Linux, el resultado a menudo contiene una gran cantidad de "coincidencias XXX de archivos binarios", lo que no me importa. ¿Cómo suprimir esta parte de los resultados, o cómo excluir archivos binarios en grep?

RandyTek
fuente
12
grep -I .........
1
@skwllsp Pero con -l, los resultados no contienen la línea coincidente, solo con el nombre del archivo coincidente.
RandyTek
Hay una opción para las líneas: grep -I -n -H
66
Esto está fuera de tema? Wow
CoffeeTableEspresso

Respuestas:

302

Hay tres opciones que puede usar. -Ies excluir archivos binarios en grep. Otros son para números de línea y nombres de archivo.

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

Entonces, esta podría ser una forma de ejecutar grep:

grep -InH your-word *
usuario184968
fuente
esto funciona. Thx @skwllsp
RandyTek
77
Usaría -Irnwhere rsignifica recursivo para mirar dentro de todas las carpetas. Hes excesivo aquí
vladkras
@vladkras, "H es excesivo aquí", ¿te refieres a redundante, es decir, ya es el predeterminado?
cp.engr
Gracias por aclarar lo que significan las opciones cortas en su respuesta. Hay tantas respuestas de comandos de Linux terse en SO que no dan ninguna explicación, lo que me parece molesto.
jrahhali
1
@AaronFranke: La -nbandera le dice a grep que informe los números de línea de los archivos en los que encontró una coincidencia. "Basado en 1" significa que el recuento de líneas comienza desde uno en lugar de cero, como suele hacerse en la programación. Entonces, si la primera línea de su archivo llamado example.txtes Hello, world, la segunda línea es Hello cat, y la tercera línea es cats are cool, entonces buscando "cat" a través de grep -n cat example.txt, obtendrá example.txt:2: Hello caty example.txt:3: cats are cool.
jvriesem
11

Esta es una pregunta antigua y ha sido respondida, pero pensé que pondría la opción --binary-files = text aquí para cualquiera que quiera usarla. La opción -I ignora el archivo binario, pero si desea que grep trate el archivo binario como un archivo de texto, use --binary-files = text de esta manera:

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$
amadain
fuente