Mam kilka plików binarnych i wiem, że w tych plikach binarnych są ciągi, które chcę znaleźć.
Chcę:
grep -lir "the string I am looking for"
i uzyskać listę wszystkich plików binarnych w określonym katalogu, które zawierają ten ciąg, ale grep -lir
najwyraźniej nie działa z tymi plikami.
Czy istnieje polecenie, które może przeprowadzić tego rodzaju wyszukiwanie z terminala?
Odpowiedz
Za pomocą GNU grep , możesz użyć opcji -a , aby traktować pliki binarne jako pliki tekstowe:
grep -ali -- string file
Jeśli Twoja wersja grep nie obsługuje -a
, możesz użyć ACK . W przypadku programu ACK 1.x musisz uwzględnić opcję -a
, w przypadku polecenia ACK 2.x nie, ponieważ podczas wyszukiwania domyślnie dołączaj plik nietekstowy (ignorowane tylko plik tekstowy, jeśli nie określono żadnych plików).
Komentarze
Odpowiedź
Polecenie strings
spowoduje dodanie wykonaj wszystkie dane ascii z pliku, jeśli następnie grep
jego wyjście, możesz wyszukać swoje dane:
strings <filename> | grep "search text"
Komentarze
- To powinna być zaakceptowana odpowiedź. Ten plik binarny dobrze nadaje się do tego zadania.
- @xeon: Nie zawsze dobrze jest go używać '
strings
, przeczytaj tutaj , aby uzyskać więcej informacji. - Ponieważ celem jest określenie, które pliki binarne zawierają ciąg,
strings -f
byłoby bardziej odpowiednie. - To jest lepsza odpowiedź.
- najlepsza odpowiedź. wielkie dzięki
Odpowiedź
Twoje pytanie dotyczy znalezienia plików binarnych zawierających wzorzec (a my już bardzo dobre odpowiedzi!). Jako komplementarność możemy chcieć uzyskać wystąpienia.
Często używam
grep -aPo ".{0,20}pattern.{0,20}" binfile
, aby uzyskać otaczający kontekst 20-znakowy.
ack
' własny opis? (w podręczniku) " ACK 2.x przeszuka każdy zwykły plik niebinarny, który nie jest jawnie ignorowane [przez bla bla] " Wygląda na to, że ACK 2.x powinien nadal przestać czytać plik wcześniej, jeśli jego zawartość wygląda na binarną.ack grep /bin/grep
, a otrzymasz wynik. Zaktualizowałem swoją odpowiedź, aby zapobiec niejasności.