Jag har en massa binära filer och jag vet att inuti dessa binärer finns strängar jag vill hitta.

Jag vill göra a:

grep -lir "the string I am looking for" 

och få en lista över alla binära filer i en viss katalog som innehåller den strängen men grep -lir fungerar tydligen inte med dessa filer.

Finns det ett kommando som kan göra den här typen av sökning från terminalen?

Svar

Med GNU grep , du kan använda -a för att få det att behandla binära filer som textfiler:

grep -ali -- string file 

Om din grep-version inte stöder -a kan du använda ack istället. Med ack 1.x måste du inkludera -a alternativet, med ack 2.x behöver du inte, eftersom när du söker inkluderar icke-textfil som standard (endast ignorerad icke- textfil när du inte angav några filer).

Kommentarer

  • Missläser jag ack ' s självbeskrivning? (i handboken) " ack 2.x söker igenom varje vanlig, icke-binär fil som inte är ignoreras uttryckligen [av bla bla] " Så det låter som att ack 2.x fortfarande bör sluta läsa en fil tidigt om innehållet ser binärt ut.
  • @PeterCordes: Att ' inträffade när inga filer valdes. Försök med ack grep /bin/grep så får du resultatet. Jag uppdaterade mitt svar för att förhindra förvirring.
  • Försök använda kommandot strängar för att få strängarna från din binära.

Svara

Kommandot strings extraheras agera alla ascii-data från en fil, om du sedan grep dess utdata, kan du söka efter dina data:

strings <filename> | grep "search text" 

Kommentarer

  • Detta bör vara det accepterade svaret. Den här binären passar bra för den här uppgiften.
  • @xeon: Den ' är inte alltid bra att använda strings , läs här för mer information.
  • Eftersom målet är att bestämma vilka binärer som innehåller strängen, strings -f skulle vara mer lämpligt.
  • Detta är ett bättre svar.
  • det bästa svaret. tack så mycket

Svar

Din fråga handlar om att hitta binära filer som innehåller ett mönster (och vi har redan mycket bra svar!). Kompletterande vi kanske vill få händelserna.

Jag använder ofta

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

för att få ett omgivande sammanhang med 20-karaktär.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *