Stránka pro grep
popisuje příznak -I
následovně :
-I Ignore binary files. This option is equivalent to --binary-file=without-match option.
Říká to také o binárních souborech:
--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.
nemohu si myslet scénáře, kdy bych se staral o shody v binárních souborech. Pokud takový scénář existuje, určitě to musí být spíše výjimka než norma. Proč „t grep
ve výchozím nastavení ignoruje binární soubory, než aby k tomu bylo nutné nastavovat tento příznak?
Komentáře
- Proměnnou
GREP_OPTIONS
můžete nastavit podle svých preferovaných nastavení, pak nemusíte ' používat tolik přepínačů příkazového řádku . - Poznámka k dalším příkazům, které takovou proměnnou nepodporují: Výchozí možnosti můžete nastavit definováním aliasu v
.(ba|z|foo)shrc':
alias grep = " grep -I " `. - To může být ve skutečnosti velmi užitečné. Hledal jsem například verzi jednoty projektu a nemohl si ' zapamatovat, ve kterém souboru byl uložen. Hledal jsem formát verze a přišel s binárními soubory, které se shodují. Ukázalo se protože to byla pre-verze 5, verze byla přítomna pouze v binárním souboru, takže bez binární shody by mi to mohlo uniknout.
- FYI Ther e ' sa ack , což je " lepší než grep ". Ack ' nevyhledává binární soubory. V Debianu spadá pod název " ack-grep ".
Odpověď
Ne vše, co si grep myslí, že je binární soubor, je vlastně binární soubor. např. loutkové klády mají v sobě barevné kódování, díky čemuž si grep myslí, že jsou binární. I přesto je chci prohledat, pokud prohledávám / var / log.
Komentáře
- Totéž platí pro soubory PDF jako dobře.
- + historicky grep to nemohl udělat, takže pouze kvůli kompatibilitě musí být výchozí nastavení all-inclusive.
- @OlivierDulac to dává smysl, jinak by ignorování binárních souborů mělo být výchozí.
Odpověď
grep
schopnost vyhledávat binární soubory jsou také užitečné, když kompiluji program a linker (ld
) si stěžuje, že nebyla nalezena nějaká funkce. Mohu použít příkaz jako
grep function_name /lib/lib*
k nalezení knihovny, která jej obsahuje. (Knihovny jsou binární soubory.)
Komentáře
- V takovém případě raději použijete '
grep -l function_name /lib/lib*
nebonm -Do /lib/lib* | grep function_name
neboldconfig -p | grep -o '/.*/lib.*' | xargs nm -Do | grep function_name
ačkoli. - No,
grep some_function /lib/*
je kratší a obvykle dává správnou odpověď – název knihovny, kterou hledám. Ale ano, někdy je vyžadován i sofistikovanější přístup, jako je ten váš.