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*
lubnm -Do /lib/lib* | grep function_name
lubldconfig -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.