Comando equivalente per grep file binari


24

Ho un sacco di binari e so che dentro questi binari ci sono delle stringhe che voglio trovare.

Voglio fare un:

grep -lir "the string I am looking for"

e ottenere un elenco di tutti i file binari all'interno di una directory specifica che contiene quella stringa ma grep -lirapparentemente non funziona con questi file.

Esiste un comando che può eseguire questo tipo di ricerca dal terminale?

Risposte:


24

Con GNU grep , puoi usare l' opzione -a per far sì che tratti i file binari come file di testo:

grep -ali -- string file

Se la tua versione grep non supporta -a, puoi usare ack . Con ack 1.x, è necessario includere l' -aopzione, con ack 2.x, in caso contrario, poiché durante la ricerca includere file non di testo per impostazione predefinita (ignorare solo i file non di testo quando non è stato specificato alcun file).


Sto leggendo ackl'auto-descrizione di me stesso? (nel manuale) "ack 2.x cercherà in ogni normale file non binario che non sia esplicitamente ignorato [da blah blah]" Quindi sembra che ack 2.x dovrebbe comunque smettere di leggere un file in anticipo se il contenuto appare binario.
Peter Cordes,

1
@PeterCordes: si è verificato quando non sono stati selezionati file. Prova ack grep /bin/grepe otterrai il risultato. Ho aggiornato la mia risposta per evitare confusione.
cuonglm,

1
Prova a usare il comando stringhe per ottenere le stringhe dal tuo binario.
Uwe Burger,

23

Il comando stringsestrarrà tutti i dati ASCII da un file, se poi grepl'output è possibile cercare i dati:

strings <filename> | grep "search text"

Questa dovrebbe essere la risposta accettata. Questo binario è adatto per questo compito.
Vladislavs Dovgalecs,

5
@xeon: non è sempre buono da usare strings, leggi qui per maggiori dettagli.
cuonglm

1
Poiché l'obiettivo è determinare quali binari contengono la stringa, strings -fsarebbe più appropriato.
jamesdlin,

Questa è una risposta migliore
Xofo

9

La tua domanda riguarda la ricerca di file binari che contengono uno schema (e abbiamo già ottime risposte!). È possibile che ci piacerebbe ottenere gli eventi.

Lo uso spesso

grep -aPo '.{0,20}pattern.{0,20}'  binfile

per ottenere un contesto circostante di 20 caratteri.

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.