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

  • Sto leggendo male 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.
  • @PeterCordes: Questo ' si è verificato quando nessun file era selezionato. Prova ack grep /bin/grep e otterrai il risultato. Ho aggiornato la mia risposta per evitare confusione.
  • Prova a utilizzare il comando strings per ottenere le stringhe dal tuo binario.

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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *