grep
est un puissant outil de ligne de commande utilisé pour rechercher dans un ou plusieurs fichiers d'entrée des lignes correspondant à une expression régulière et écrit chaque ligne correspondante sur la sortie standard.
Dans cet article, nous allons vous montrer comment exclure un ou plusieurs mots, modèles ou répertoires lors d'une recherche avec grep
.
Exclure les mots et les modèles #
Pour afficher uniquement les lignes qui ne correspondent pas à un modèle de recherche, utilisez le -v
( ou --invert-match
).
Par exemple, pour imprimer les lignes qui ne contiennent pas la chaîne nologin
vous utiliseriez :
grep -wv nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash
git:x:994:994:git daemon user:/:/usr/bin/git-shell
linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Le -w
l'option indique grep
pour renvoyer uniquement les lignes où la chaîne spécifiée est un mot entier (entouré de caractères non verbaux).
Par défaut, grep
est sensible à la casse. Cela signifie que les caractères majuscules et minuscules sont traités comme distincts. Pour ignorer la casse lors de la recherche, appelez grep
avec le -i
option.
Si la chaîne de recherche comprend des espaces, vous devez la mettre entre guillemets simples ou doubles.
Pour spécifier deux modèles de recherche ou plus, utilisez le -e
choix :
grep -wv -e nologin -e bash /etc/passwd
Vous pouvez utiliser le -e
autant de fois que nécessaire.
Une autre option pour exclure plusieurs modèles de recherche consiste à joindre les modèles à l'aide de l'opérateur OR |
.
L'exemple suivant imprime les lignes qui ne contiennent pas les chaînes nologin
ou bash
:
grep -wv 'nologin\|bash' /etc/passwd
GNU grep
prend en charge trois syntaxes d'expressions régulières, Basic, Extended et compatible Perl. Par défaut, grep
interprète le modèle comme une expression régulière de base où les méta-caractères tels que |
perdent leur signification particulière et vous devez utiliser leurs versions avec barre oblique inversée.
Si vous utilisez l'option d'expression régulière étendue -E
, puis l'opérateur |
ne doit pas être échappé, comme indiqué ci-dessous :
grep -Ewv 'nologin|bash' /etc/passwd
Vous pouvez spécifier différentes correspondances possibles qui peuvent être des chaînes littérales ou des ensembles d'expressions. Dans l'exemple suivant, les lignes où la chaîne games
se produisent au tout début d'une ligne sont exclus :
grep -v "^games" file.txt
La sortie d'une commande peut être filtrée avec grep
à travers la tuyauterie, et seules les lignes correspondant à un motif donné seront imprimées sur le terminal.
Par exemple, pour imprimer tous les processus en cours d'exécution sur votre système, à l'exception de ceux qui s'exécutent en tant qu'utilisateur "root", vous pouvez filtrer la sortie de ps
commande :
ps -ef | grep -wv root
Exclure les répertoires et les fichiers #
Parfois lors d'une recherche récursive avec le -r
ou -R
options, vous souhaiterez peut-être exclure des répertoires spécifiques du résultat de la recherche.
-r
ou -R
options est que lorsque grep est invoqué avec une majuscule R
il suivra tous les liens symboliques
Pour exclure un répertoire de la recherche, utilisez le --exclude-dir
option. Le chemin d'accès au répertoire exclu est relatif au répertoire de recherche.
Voici un exemple montrant comment rechercher la chaîne linuxize
dans tous les fichiers à l'intérieur du /etc
, à l'exclusion de /etc/pki
répertoire :
grep -R --exclude-dir=pki linuxize /etc
Pour exclure plusieurs répertoires, placez les répertoires exclus entre accolades et séparez-les par des virgules sans espaces.
Par exemple, pour rechercher des fichiers contenant la chaîne "gnu" dans votre système Linux, à l'exclusion de proc
, boot
, et sys
répertoires que vous exécuteriez :
grep -r --exclude-dir={proc,boot,sys} gnu /
Lorsque vous utilisez la correspondance générique, vous pouvez exclure les fichiers dont le nom de base correspond au GLOB spécifié dans le --exclude
option.
Dans l'exemple ci-dessous, nous recherchons dans tous les fichiers du répertoire de travail actuel la chaîne linuxize
, à l'exclusion des fichiers se terminant par .png
et .jpg
répertoire :
grep -rl --exclude=*.{png,jpg} linuxize *
Conclusion #
Le grep
La commande vous permet d'exclure des modèles et des répertoires lors de la recherche de fichiers.