Jeg har en haug med binærfiler, og jeg vet at inne i disse binærfiler er det strenger jeg vil finne.
Jeg vil gjøre en:
grep -lir "the string I am looking for"
og få en liste over alle binære filer i en bestemt katalog som inneholder den strengen, men grep -lir
fungerer tilsynelatende ikke med disse filene.
Er det en kommando som kan gjøre denne typen søk fra terminal?
Svar
Med GNU grep , kan du bruke -a alternativet for å få det til å behandle binære filer som tekstfiler:
grep -ali -- string file
Hvis grep-versjonen din ikke støtter -a
, kan du bruke ack i stedet. Med ack 1.x må du inkludere -a
-alternativet, med ack 2.x trenger du ikke, siden du når du søker inkluderer ikke-tekstfiler som standard (bare ignorert ikke- tekstfil når du ikke spesifiserte noen filer).
Kommentarer
Svar
Kommandoen strings
vil ekstr handle alle ascii-data fra en fil, hvis du deretter grep
dens utdata, kan du søke etter dataene dine:
strings <filename> | grep "search text"
Kommentarer
- Dette skal være det aksepterte svaret. Denne binæren passer godt for denne oppgaven.
- @xeon: Det ' er ikke alltid bra å bruke
strings
, les her for mer informasjon. - Siden målet er å bestemme hvilke binære filer som inneholder strengen,
strings -f
ville være mer passende. - Dette er et bedre svar.
- det beste svaret. tusen takk
Svar
Spørsmålet ditt handler om å finne binære filer som inneholder et mønster (og vi har allerede veldig gode svar!). Utfyllende kan det være lurt å hente forekomster.
Jeg bruker ofte
grep -aPo ".{0,20}pattern.{0,20}" binfile
for å få en omgivende kontekst av 20-tegn.
ack
' s egen beskrivelse? (i manualen) " ack 2.x vil søke gjennom alle vanlige, ikke-binære filer som ikke er eksplisitt ignorert [av bla bla] " Så det høres ut som at ack 2.x fortsatt skal slutte å lese en fil tidlig hvis innholdet ser binært ut.ack grep /bin/grep
, så får du resultatet. Jeg oppdaterte svaret mitt for å forhindre forvirring.