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

  • Czy błędnie czytam 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ą.
  • @PeterCordes: To ' wystąpiło, gdy nie wybrano żadnych plików. Spróbuj ack grep /bin/grep, a otrzymasz wynik. Zaktualizowałem swoją odpowiedź, aby zapobiec niejasności.
  • Spróbuj użyć polecenia strings, aby pobrać ciągi z pliku binarnego.

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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *