Strona podręcznika grep zawiera opis flagi -I w następujący sposób :

-I Ignore binary files. This option is equivalent to --binary-file=without-match option. 

To również mówi o plikach binarnych:

 --binary-files=value Controls searching and printing of binary files. Options are binary, the default: search binary files but do not print them; without-match: do not search binary files; and text: treat all files as text. 

Nie myślę scenariusza, w którym przejmowałbym się dopasowaniami w plikach binarnych. Jeśli taki scenariusz istnieje, to z pewnością musi to być raczej wyjątek niż norma. Dlaczego „t grep domyślnie ignoruje pliki binarne, zamiast wymagać ustawienia tej flagi, aby to zrobić?

Komentarze

  • Możesz ustawić zmienną GREP_OPTIONS na swoje preferowane ustawienia, a następnie nie ' nie musisz używać tylu przełączników wiersza poleceń .
  • Uwaga dotycząca innych poleceń, które nie obsługują takiej zmiennej: możesz ustawić domyślne opcje, definiując alias w swoim .(ba|z|foo)shrc': alias grep = " grep -I " `.
  • To może być bardzo przydatne. Na przykład szukałem wersji Unity projektu i nie mogłem ' zapamiętać, w którym pliku był przechowywany. Szukałem formatu wersji i znalazłem kilka pasujących plików binarnych. Okazało się, że ponieważ była to wersja wcześniejsza niż 5, wersja była obecna tylko w pliku binarnym, więc bez dopasowania binarnego mógłbym to przeoczyć.
  • FYI Ther e ' sa narzędzie ACK , które jest trochę " lepsze niż grep ". Ack nie ' t przeszukuje pliki binarne. W Debianie występuje pod nazwą " ACK-grep ".

Odpowiedź

Nie wszystko, co według grepa jest plikiem binarnym, w rzeczywistości jest plikiem binarnym. na przykład dzienniki marionetek mają w sobie kodowanie w kolorze ansi, co sprawia, że grep myśli, że są binarne. Nadal chciałbym je przeszukiwać, gdybym przeglądał / var / log.

Komentarze

  • To samo dotyczy plików PDF, cóż.
  • + historycznie grep NIE mógł tego zrobić, więc tylko dla kompatybilności, domyślnie musi być all-inclusive.
  • @OlivierDulac ma to sens, w przeciwnym razie ignorowanie plików binarnych powinno być domyślnie.

Odpowiedź

grep możliwości wyszukiwania pliki binarne są również przydatne, gdy kompiluję program, a linker (ld) narzeka, że nie można znaleźć jakiejś funkcji. Mogę użyć polecenia takiego jak

grep function_name /lib/lib*

, aby znaleźć bibliotekę, która go zawiera. (Biblioteki są plikami binarnymi.)

Komentarze

  • W takim przypadku ' raczej używaj grep -l function_name /lib/lib* lub nm -Do /lib/lib* | grep function_name lub ldconfig -p | grep -o '/.*/lib.*' | xargs nm -Do | grep function_name chociaż.
  • Cóż, grep some_function /lib/* jest krótszy i zwykle podaje poprawną odpowiedź – nazwę biblioteki, której szukam. Ale tak, czasami wymagane jest również bardziej wyrafinowane podejście, takie jak twoje.

Dodaj komentarz

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