Mám spoustu binárních souborů a vím, že uvnitř těchto binárních souborů jsou řetězce, které chci najít.
Chci udělat:
grep -lir "the string I am looking for"
a získat seznam všech binárních souborů uvnitř konkrétního adresáře, které obsahují tento řetězec, ale grep -lir
s těmito soubory zjevně nefunguje.
Existuje příkaz, který umožňuje tento druh vyhledávání z terminálu?
Odpovědět
S GNU grep , můžete použít možnost -a , aby se s binárními soubory zacházelo jako s textovými soubory:
grep -ali -- string file
Pokud vaše verze grep nepodporuje -a
, můžete použít místo . S ack 1.x musíte zahrnout možnost -a
, s ack 2.x nedáte, protože při vyhledávání ve výchozím nastavení zahrnout netextový soubor (ignorováno pouze textový soubor, pokud jste nezadali žádné soubory).
Komentáře
Odpovědět
Příkaz strings
bude extr jednat se všemi daty ascii ze souboru, pokud pak grep
jeho výstup, můžete vyhledat svá data:
strings <filename> | grep "search text"
Komentáře
- Toto by měla být přijatá odpověď. Tento binární soubor je pro tento úkol vhodný.
- @xeon: ' není vždy dobré použít
strings
, přečtěte si zde , kde najdete další podrobnosti. - Jelikož cílem je určit které binární soubory obsahují řetězec,
strings -f
by bylo vhodnější. - Toto je lepší odpověď.
- nejlepší odpověď. moc děkuji
odpověď
Vaše otázka se týká hledání binárních souborů, které obsahují vzor (a my jsme již velmi dobré odpovědi!). Doplňkově bychom rádi získali výskyty.
Často používám
grep -aPo ".{0,20}pattern.{0,20}" binfile
k získání okolního kontextu 20 znaků.
ack
' s vlastní popis? (v příručce) " ack 2.x prohledá každý běžný, nebinární soubor, který není výslovně ignorováno [by bla bla] " Takže to zní, jako by ack 2.x měl přestat číst soubor dříve, pokud obsah vypadá binárně.ack grep /bin/grep
a dostanete výsledek. Aktualizoval jsem svou odpověď, abych zabránil matení.