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* nebo nm -Do /lib/lib* | grep function_name nebo ldconfig -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áš.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *