La página de manual de grep
describe el indicador -I
de la siguiente manera :
-I Ignore binary files. This option is equivalent to --binary-file=without-match option.
También dice esto acerca de los archivos binarios:
--binary-files=value Controls searching and printing of binary files. Options are binary, the default: search binary files but do not print them; without-match: do not search binary files; and text: treat all files as text.
No puedo pensar de un escenario en el que me preocuparía por las coincidencias en archivos binarios. Si tal escenario existe, seguramente debe ser la excepción y no la norma. ¿Por qué no «t grep
ignora los archivos binarios de forma predeterminada en lugar de requerir la configuración de este indicador para hacerlo?
Comentarios
- Puede configurar la variable
GREP_OPTIONS
en su configuración preferida, luego no ' no tiene que usar tantos interruptores de línea de comando . - Una nota para otros comandos que no admiten dicha variable: puede establecer opciones predeterminadas definiendo un alias en su
.(ba|z|foo)shrc':
alias grep = " grep -I " `. - Esto puede ser muy útil. Por ejemplo, estaba buscando la versión de unidad de un proyecto, y no pude ' recordar en qué archivo estaba guardado. Busqué el formato de la versión y encontré algunos archivos binarios que coinciden. como era anterior a la versión 5, la versión solo estaba presente en un archivo binario, por lo que sin la coincidencia binaria, podría haberla perdido.
- FYI Ther e ' una herramienta ack que es algo " mejor que grep ". Ack no ' t busca archivos binarios. En Debian, viene con el nombre " ack-grep ".
Respuesta
No todo lo que grep piensa que es un archivo binario, es en realidad un archivo binario. p.ej. Los registros de puppet tienen codificación de colores ansi, lo que hace que grep piense que son binarios. Sin embargo, todavía querría buscarlos si estoy revisando / var / log.
Comentarios
- Lo mismo ocurre con los archivos PDF que bueno.
- + históricamente grep NO podía hacer eso, por lo que solo por compatibilidad, el valor predeterminado debe ser todo incluido.
- @OlivierDulac tiene sentido, de lo contrario, ignorar los archivos binarios debería ser el predeterminado.
Responder
grep
capacidad de búsqueda Los archivos binarios también son útiles cuando estoy compilando un programa y el enlazador (ld
) se queja de que no se encuentra alguna función. Puedo usar un comando como
grep function_name /lib/lib*
para encontrar la biblioteca que lo contiene. (Las bibliotecas son archivos binarios).
Comentarios
- En ese caso, ' prefiere utilizar
grep -l function_name /lib/lib*
onm -Do /lib/lib* | grep function_name
oldconfig -p | grep -o '/.*/lib.*' | xargs nm -Do | grep function_name
. - Bueno,
grep some_function /lib/*
es más corto y normalmente da la respuesta correcta: nombre de la biblioteca que estoy buscando. Pero sí, a veces también se requiere un enfoque más sofisticado como el suyo.