GNU/Linux >> Tutoriels Linux >  >> Linux

Comment exclure dans Grep

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.

La principale différence entre -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.


Linux
  1. Utiliser grep pour rechercher en sens inverse

  2. Comment puis-je rechercher un motif multiligne dans un fichier ?

  3. Comment puis-je grep récursivement?

  4. Comment puis-je exclure des répertoires de grep -R ?

  5. Comment grep \n dans le fichier

Comment effectuer une recherche dans Vim / Vi

Comment effectuer une recherche de modèle dans les fichiers à l'aide de Grep

Comment exclure dans la commande Grep sous Linux

Comment effectuer une recherche dans Nano

Comment utiliser grep sous Linux

Comment effectuer une recherche Grep sur tous les fichiers et dans tous les répertoires