La page de manuel pour grep
décrit lindicateur -I
comme suit :
-I Ignore binary files. This option is equivalent to --binary-file=without-match option.
Cela dit aussi ceci à propos des fichiers binaires:
--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.
Je ne peux pas penser dun scénario où je me soucierais des correspondances dans des fichiers binaires. Si un tel scénario existe, il doit sûrement être lexception plutôt que la norme. Pourquoi « t grep
ignore-t-il les fichiers binaires par défaut plutôt que de demander la définition de cet indicateur pour le faire?
Commentaires
- Vous pouvez définir la variable
GREP_OPTIONS
sur vos paramètres préférés, puis vous n ' pas besoin d’utiliser autant de commutateurs de ligne de commande . - Remarque pour les autres commandes qui ne prennent pas en charge une telle variable: vous pouvez définir les options par défaut en définissant un alias dans votre
.(ba|z|foo)shrc':
alias grep = " grep -I " `. - Cela peut en fait être très utile. Par exemple, je cherchais la version unitaire dun projet, et ' ne pouvait pas me souvenir dans quel fichier il était conservé. Jai recherché le format de la version, et il est venu avec quelques fichiers binaires qui correspondent. Il sest avéré comme cétait la pré-version 5, la version nétait présente que dans un fichier binaire, donc sans la correspondance binaire, je laurais peut-être manquée.
- Pour info e ' un outil ack qui est en quelque sorte " mieux que grep ". Ack ne ' t recherche les fichiers binaires. Dans Debian, il vient sous le nom " ack-grep ".
Réponse
Tout ce que grep pense être un fichier binaire nest pas en fait un fichier binaire. par exemple. Les journaux de puppet ont un code couleur ansi, ce qui fait penser à grep quils sont binaires. Je voudrais quand même les rechercher si je passe par / var / log.
Commentaires
- Il en va de même pour les fichiers PDF comme
- + historiquement, grep ne pouvait PAS faire cela, donc pour la compatibilité uniquement, la valeur par défaut doit être tout compris.
- @OlivierDulac cela a du sens, sinon ignorer les fichiers binaires devrait être le par défaut.
Réponse
grep
capacité de recherche Les fichiers binaires sont également utiles lorsque je compile un programme et que léditeur de liens (ld
) se plaint dune fonction introuvable. Je peux utiliser une commande comme
grep function_name /lib/lib*
pour trouver la bibliothèque qui le contient. (Les bibliothèques sont des fichiers binaires.)
Commentaires
- Dans ce cas, vous ' utiliser plutôt
grep -l function_name /lib/lib*
ounm -Do /lib/lib* | grep function_name
ouldconfig -p | grep -o '/.*/lib.*' | xargs nm -Do | grep function_name
cependant. - Eh bien,
grep some_function /lib/*
est plus court et donne généralement la bonne réponse – nom de la bibliothèque que je recherche. Mais oui, parfois une approche plus sophistiquée comme la vôtre est également nécessaire.