La manpage di grep descrive il flag -I come segue :

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

Dice anche questo sui file binari:

 --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. 

Non riesco a pensare di uno scenario in cui mi preoccuperei delle corrispondenze nei file binari. Se un tale scenario esiste, sicuramente deve essere leccezione piuttosto che la norma. Perché “t grep ignora i file binari per impostazione predefinita invece di richiedere limpostazione di questo flag per farlo?

Commenti

  • Puoi impostare la variabile GREP_OPTIONS sulle tue impostazioni preferite, quindi ' non devi usare così tante opzioni della riga di comando .
  • Una nota per altri comandi che non supportano tale variabile: puoi impostare le opzioni predefinite definendo un alias nel tuo .(ba|z|foo)shrc': alias grep = " grep -I " `.
  • Questo può effettivamente essere molto utile. Ad esempio, stavo cercando la versione Unity di un progetto e ' non ricordava in quale file era conservato. Ho cercato il formato della versione e sono usciti alcuni file binari che corrispondono. poiché era la versione precedente alla 5, la versione era presente solo in un file binario, quindi senza la corrispondenza binaria potrei averla persa.
  • FYI Ther e ' uno strumento ack che è una specie di " migliore di grep ". Riconoscere non ' cerca file binari. In Debian, ha il nome " ack-grep ".

Risposta

Non tutto ciò che grep pensa sia un file binario, in realtà è un file binario. per esempio. I registri delle marionette contengono un codice colore ansi, che fa pensare a grep che siano binari. Tuttavia, vorrei comunque cercarli se scrivo in / var / log.

Commenti

  • Lo stesso vale per i file PDF come bene.
  • + storicamente grep NON poteva farlo, quindi solo per compatibilità, il valore predefinito deve essere all-inclusive.
  • @OlivierDulac ha senso, altrimenti ignorare i file binari dovrebbe essere il predefinito.

Risposta

grep capacità di ricerca i file binari sono utili anche quando sto compilando un programma e il linker (ld) si lamenta del fatto che alcune funzioni non vengono trovate. Posso usare un comando come

grep function_name /lib/lib*

per trovare la libreria che la contiene. (Le librerie sono file binari.)

Commenti

  • In tal caso, ' preferiresti usare grep -l function_name /lib/lib* o nm -Do /lib/lib* | grep function_name o ldconfig -p | grep -o '/.*/lib.*' | xargs nm -Do | grep function_name però.
  • Bene, grep some_function /lib/* è più breve e di solito fornisce la risposta corretta: nome della libreria che sto cercando. Ma sì, a volte è richiesto anche un approccio più sofisticato come il tuo.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *