Pagina de manual pentru grep
descrie steagul -I
după cum urmează :
-I Ignore binary files. This option is equivalent to --binary-file=without-match option.
De asemenea, se spune despre fișiere binare:
--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.
Nu pot să cred a unui scenariu în care mi-ar păsa de meciurile din fișierele binare. Dacă există un astfel de scenariu, cu siguranță trebuie să fie mai degrabă o excepție decât o normă. De ce nu „t grep
ignoră fișierele binare în mod implicit, mai degrabă decât să solicite setarea acestui flag pentru a face acest lucru?
Comentarii
- Puteți seta variabila
GREP_OPTIONS
la setările preferate, apoi nu ' nu trebuie să utilizați atâtea comutatoare din linia de comandă . - O notă pentru alte comenzi care nu acceptă o astfel de variabilă: puteți seta opțiuni implicite definind un alias în
.(ba|z|foo)shrc':
alias grep = " grep -I " `. - Acest lucru poate fi de fapt foarte util. De exemplu, căutam versiunea de unitate unui proiect și nu am putut ' să-mi amintesc în ce fișier a fost păstrat. Am căutat formatul versiunii și am venit cu câteva fișiere binare care se potrivesc. S-a dovedit deoarece era pre-versiunea 5, versiunea era prezentă doar într-un fișier binar, deci fără potrivirea binară, aș fi putut să o pierd.
- FYI Ther e ' un instrument ack care este un fel de " mai bun decât grep ". Ack nu ' nu caută fișiere binare. În Debian, acesta vine sub numele " ack-grep ".
Răspuns
Nu tot ceea ce grep crede că este un fișier binar, este de fapt un fișier binar. de exemplu. buștenii păpușilor au coduri de culoare ansi, ceea ce îi face pe grep să creadă că sunt binari. Aș vrea în continuare să le caut dacă totuși mă uit prin / var / log.
Comentarii
- Același lucru este valabil și pentru fișierele PDF ca Ei bine.
- + grep din punct de vedere istoric NU ar putea face asta, deci numai pentru compatibilitate, implicit trebuie să fie all-inclusive.
- @OlivierDulac are sens, altfel ignorarea fișierelor binare ar trebui să fie implicit.
Răspuns
grep
abilitatea de a căuta fișierele binare sunt utile și atunci când compilez un program, iar linker-ul (ld
) se plânge că unele funcții nu au fost găsite. Pot folosi o comandă precum
grep function_name /lib/lib*
pentru a găsi biblioteca care o conține. (Bibliotecile sunt fișiere binare.)
Comentarii
- În acest caz, preferați '
grep -l function_name /lib/lib*
saunm -Do /lib/lib* | grep function_name
sauldconfig -p | grep -o '/.*/lib.*' | xargs nm -Do | grep function_name
totuși. - Ei bine,
grep some_function /lib/*
este mai scurt și de obicei oferă un răspuns corect – numele bibliotecii pe care o caut. Dar da, uneori este necesară și o abordare mai sofisticată, precum cea a dvs.