Jeg har en masse binære filer, og jeg ved, at inden i disse binære filer er der strenge, jeg vil finde.
Jeg vil gøre et:
grep -lir "the string I am looking for"
og få en liste over alle binære filer i en bestemt mappe, der indeholder den streng, men grep -lir
fungerer tilsyneladende ikke med disse filer.
Er der en kommando, der kan udføre denne form for søgning fra terminalen?
Svar
Med GNU grep , du kan bruge -a mulighed for at få det til at behandle binære filer som tekstfiler:
grep -ali -- string file
Hvis din grep-version ikke understøtter -a
, kan du bruge ack i stedet. Med ack 1.x skal du medtage -a
valgmulighed, med ack 2.x behøver du ikke, da du ved søgning inkluderer ikke-tekstfil som standard (kun ignoreret ikke- tekstfil, når du ikke angav nogen filer).
Kommentarer
Svar
Kommandoen strings
ekstr handle alle ascii-data fra en fil, hvis du derefter grep
dens output, kan du søge efter dine data:
strings <filename> | grep "search text"
Kommentarer
- Dette skal være det accepterede svar. Denne binære funktion er god til denne opgave.
- @xeon: Den ' er ikke altid god at bruge
strings
, læs her for flere detaljer. - Da målet er at bestemme hvilke binære filer der indeholder strengen,
strings -f
ville være mere passende. - Dette er et bedre svar.
- det bedste svar. mange tak
Svar
Dit spørgsmål handler om at finde binære filer, der indeholder et mønster (og vi har allerede meget gode svar!). Supplerende kan vi godt lide at hente forekomsterne.
Jeg bruger ofte
grep -aPo ".{0,20}pattern.{0,20}" binfile
for at få en omgivende kontekst med 20 tegn.
ack
' s selvbeskrivelse? (i manualen) " ack 2.x søger gennem hver almindelig, ikke-binær fil, der ikke er eksplicit ignoreret [af bla bla] " Så det lyder som om ack 2.x stadig skal stoppe med at læse en fil tidligt, hvis indholdet ser binært ud.ack grep /bin/grep
, så får du resultatet. Jeg opdaterede mit svar for at forhindre forvirring.