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* o nm -Do /lib/lib* | grep function_name o ldconfig -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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *