Ik heb een aantal binaire bestanden en ik weet dat er binnen deze binaire bestanden strings zijn die ik wil vinden.
Ik wil een:
grep -lir "the string I am looking for"
doen en een lijst krijgen van alle binaire bestanden in een bepaalde directory die die string bevatten maar grep -lir
werkt blijkbaar niet met deze bestanden.
Is er een commando dat dit soort zoekopdrachten vanaf de terminal kan uitvoeren?
Antwoord
Met GNU grep , u kunt de optie -a gebruiken om binaire bestanden als tekstbestanden te laten behandelen:
grep -ali -- string file
Als uw grep-versie -a
niet ondersteunt, kunt u ack . Met ack 1.x moet u de optie -a
opnemen, met ack 2.x hoeft u dat niet te doen, aangezien bij het zoeken standaard een niet-tekstbestand wordt opgenomen (alleen genegeerd niet- tekstbestand als u geen bestanden hebt opgegeven).
Opmerkingen
Answer
Het commando strings
zal extr handelt alle ascii-gegevens uit een bestand, als u vervolgens grep
de uitvoer ervan instelt, kunt u naar uw gegevens zoeken:
strings <filename> | grep "search text"
Reacties
- Dit zou het geaccepteerde antwoord moeten zijn. Dit binaire bestand is geschikt voor deze taak.
- @xeon: Het ' is niet altijd goed om
strings
, lees hier voor meer details. - Aangezien het doel is om te bepalen welke binaries de tekenreeks bevatten,
strings -f
zou geschikter zijn. - Dit is een beter antwoord.
- het beste antwoord. heel erg bedankt
Antwoord
Uw vraag gaat over het vinden van binaire bestanden die een patroon bevatten (en we hebben al zeer goede antwoorden!). Complementair willen we misschien de occurrences krijgen.
Ik gebruik vaak
grep -aPo ".{0,20}pattern.{0,20}" binfile
om een omringende context van 20 tekens te krijgen.
ack
' s zelfbeschrijving? (in de handleiding) " ack 2.x doorzoekt elk normaal, niet-binair bestand dat niet expliciet genegeerd [door blah blah] " Dus het klinkt alsof ack 2.x nog steeds vroegtijdig moet stoppen met het lezen van een bestand als de inhoud er binair uitziet.ack grep /bin/grep
en je krijgt het resultaat. Ik heb mijn antwoord bijgewerkt om verwarring te voorkomen.