Tengo un montón de binarios y sé que dentro de estos binarios hay cadenas que quiero encontrar.
Quiero hacer un:
grep -lir "the string I am looking for"
y obtener una lista de todos los binarios dentro de un directorio en particular que contienen esa cadena pero grep -lir
aparentemente no funciona con estos archivos.
¿Existe algún comando que pueda hacer este tipo de búsqueda desde la terminal?
Responder
Con GNU grep , puede usar la opción -a para que trate los archivos binarios como archivos de texto:
grep -ali -- string file
Si su versión grep no es compatible con -a
, puede usar ack en su lugar. Con ack 1.x, debe incluir la opción -a
, con ack 2.x, no lo hace, ya que al buscar incluir archivos que no son de texto de forma predeterminada (solo se ignoran los que no son archivo de texto cuando no especificó ningún archivo).
Comentarios
Responder
El comando strings
extraerá actuar todos los datos ascii de un archivo, si luego grep
su salida, puede buscar sus datos:
strings <filename> | grep "search text"
Comentarios
- Esta debe ser la respuesta aceptada. Este binario es adecuado para esta tarea.
- @xeon: ' no siempre es bueno usar
strings
, lea aquí para obtener más detalles. - Dado que el objetivo es determinar qué binarios contienen la cadena,
strings -f
sería más apropiado. - Esta es una mejor respuesta.
- la mejor respuesta. muchas gracias
Responder
Su pregunta es acerca de buscar archivos binarios que contengan un patrón (y ya hemos muy buenas respuestas!). De forma complementaria, nos gustaría obtener las ocurrencias.
A menudo uso
grep -aPo ".{0,20}pattern.{0,20}" binfile
para obtener un contexto circundante de 20 caracteres.
ack
' s autodescripción? (en el manual) " ack 2.x buscará en todos los archivos no binarios normales que no sean explícitamente ignorado [por blah blah] " Así que parece que ack 2.x debería dejar de leer un archivo antes de tiempo si el contenido parece binario.ack grep /bin/grep
y obtendrá el resultado. Actualicé mi respuesta para evitar confusiones.