Minulla on joukko binäärejä ja tiedän, että näiden binäärien sisällä on merkkijonoja, jotka haluan löytää.
Haluan tehdä:
grep -lir "the string I am looking for"
ja saada luettelon kaikista tietyn hakemiston binääreistä, jotka sisältävät kyseisen merkkijonon, mutta grep -lir
ei ilmeisesti toimi näiden tiedostojen kanssa.
Onko komentoa, joka voi tehdä tällaisen haun terminaalista?
Vastaa
Kanssa GNU grep , voit käyttää -a -vaihtoehtoa, jotta se käsittelee binaaritiedostoja tekstitiedostoina:
grep -ali -- string file
Jos grep-versiosi ei tue -a
, voit käyttää ack . Ack 1.x: n kanssa sinun on sisällytettävä vaihtoehto -a
, ack 2.x: n kanssa et t, koska etsittäessä oletuksena ei-tekstitiedosto (vain ohitetut muut kuin tekstitiedosto, kun et määritä yhtään tiedostoa).
Kommentit
Vastaa
Komento strings
ekstr toimi kaikki tiedoston ascii-tiedot, jos sitten grep
sen tuotoksen, voit etsiä tietojasi:
strings <filename> | grep "search text"
Kommentit
- Tämän pitäisi olla hyväksytty vastaus. Tämä binääri sopii hyvin tähän tehtävään.
- @xeon: Ei ' ole aina hyvä käyttää
strings
, lue lisätietoja täältä . - Koska tavoitteena on määrittää mitkä binaarit sisältävät merkkijonon,
strings -f
olisi sopivampi. - Tämä on parempi vastaus.
- paras vastaus. kiitos paljon
vastaus
Kysymyksesi koskee mallin sisältävien binaaritiedostojen löytämistä (ja olemme jo erittäin hyvät vastaukset!). Saatamme haluta saada esiintymiä täydentäviksi.
Käytän usein
grep -aPo ".{0,20}pattern.{0,20}" binfile
saadakseni ympäröivän 20-merkkisen kontekstin.
ack
' s itsekuvaus? (käsikirjassa) " ack 2.x etsii jokaisesta tavallisesta ei-binäärisestä tiedostosta, jota ei ole nimenomaisesti ohitettu [kirjoittanut blah blah] " Joten kuulostaa siltä, että ack 2.x: n pitäisi silti lopettaa tiedoston lukeminen aikaisin, jos sen sisältö näyttää binaariselta.ack grep /bin/grep
ja saat tuloksen. Päivitin vastaukseni sekaannusten estämiseksi.