Ho un sacco di binari e so che allinterno di questi binari ci sono stringhe che voglio trovare.
Voglio fare:
grep -lir "the string I am looking for"
e ottenere un elenco di tutti i binari allinterno di una particolare directory che contiene quella stringa ma grep -lir
apparentemente non funziona con questi file.
Esiste un comando in grado di eseguire questo tipo di ricerca dal terminale?
Rispondi
Con GNU grep , puoi utilizzare lopzione -a per fare in modo che tratti i file binari come file di testo:
grep -ali -- string file
Se la tua versione di grep non supporta -a
, puoi utilizzare ack invece. Con ack 1.x, devi includere lopzione -a
, con ack 2.x, non lo fai, poiché durante la ricerca includi file non di testo per impostazione predefinita (ignorato solo non file di testo quando non hai specificato alcun file).
Commenti
Risposta
Il comando strings
estr agisci su tutti i dati ASCII da un file, se poi grep
il suo output, puoi cercare i tuoi dati:
strings <filename> | grep "search text"
Commenti
- Questa dovrebbe essere la risposta accettata. Questo binario è adatto per questa attività.
- @xeon: ' non è sempre buono da usare
strings
, leggi qui per maggiori dettagli. - Poiché lobiettivo è determinare quali file binari contengono la stringa,
strings -f
sarebbe più appropriato. - Questa è una risposta migliore.
- la risposta migliore. grazie mille
Risposta
La tua domanda riguarda la ricerca di file binari che contengono un modello (e abbiamo già risposte molto buone!). In modo complementare potremmo voler ottenere le occorrenze.
Uso spesso
grep -aPo ".{0,20}pattern.{0,20}" binfile
per ottenere un contesto circostante di 20 caratteri.
ack
' s auto-descrizione? (nel manuale) " ack 2.x cercherà in tutti i normali file non binari che non lo sono esplicitamente ignorato [da blah blah] " Quindi sembra che ack 2.x dovrebbe comunque interrompere la lettura di un file in anticipo se i contenuti sembrano binari.ack grep /bin/grep
e otterrai il risultato. Ho aggiornato la mia risposta per evitare confusione.