Comment exclure un mot avec grep

L'outil de ligne de commande grep est extrêmement utile pour rechercher dans les données textuelles des lignes et des fragments qui correspondent à une chaîne, un caractère, un mot ou une expression régulière définis. Alors que la plupart des utilisations de grep sont pour le tri des données pour les correspondances syntaxiques, que faire si vous voulez exclure un mot ou une chaîne avec grep à la place? Exclure les correspondances de ligne avec grep est tout aussi utile que de trouver et d'imprimer des correspondances dans grep, alors voyons comment exclure les correspondances de chaînes et exclure les mots avec grep.


Évidemment, vous aurez besoin d'avoir une expérience en ligne de commande et une exposition à grep pour trouver cela utile. Si vous voulez suivre, vous pouvez ouvrir l'application Terminal et l'essayer vous-même. Depuis grep est un utilitaire agnostique OS, vous pouvez utiliser l'astuce d'exclusion dans Mac OS, Linux, Unix, ou tout ce que vous avez d'autre qui utilise grep.

Comment exclure un seul mot avec grep

La façon la plus simple d'exclure des lignes avec une chaîne ou une syntaxe est d'utiliser grep et l'option -v.

Par exemple, disons que nous utilisons cat pour imprimer un fichier sur la ligne de commande, mais nous voulons exclure toutes les lignes qui incluent le terme "ThisWord", alors la syntaxe ressemblerait à ceci:

cat example.txt | grep -v "ThisWord"

La sortie sera le fichier texte example.txt mais exclura toute ligne contenant une chaîne correspondant à "ThisWord".

Vous pouvez également utiliser grep directement sur les fichiers et exclure les correspondances de ligne basées sur des mots ou une syntaxe, comme ceci:

grep -v "ThisWord" example.txt

Utilisez celui qui fonctionne le mieux pour votre flux de travail particulier.

Comment faire pour exclure plusieurs chaînes ou mots avec grep

Maintenant que vous savez comment exclure des correspondances pour un seul mot, la prochaine question évidente concerne l'exclusion de plusieurs mots avec grep. C'est aussi simple, et il y a plusieurs façons d'y parvenir en utilisant le drapeau -v ainsi que le drapeau -e.

Prenons d'abord l'exemple ci-dessus de l'utilisation de cat sur un fichier redirigé vers grep, et exclure toute ligne correspondant à deux mots; "Word1" et "Word2", cela ressemblerait à ceci:

cat example.txt | grep -v -e "Word1" -e "Word2"

Toutes les lignes contenant "Word1" ou "Word2" seront exclues des résultats imprimés.

Vous pouvez également utiliser grep directement sur les fichiers comme avant:

grep -v -e "Word1" -e "Word2" example.txt

Une autre approche consiste à séparer ce qu'il faut exclure avec grep en utilisant un tube pour séparer chaque correspondance, comme ceci:

grep -Ev "word1|word2" example.txt

Si vous testez l'une de ces options sur un exemple de fichier texte, vous verrez que la sortie est identique quelle que soit l'approche utilisée, chaque ligne excluant les phrases ciblées, la syntaxe, les mots ou la correspondance de texte.

Génial, montrez-moi un exemple utile d'exclusion de données avec grep!

Pour un exemple pratique que les utilisateurs Mac avancés peuvent trouver utile, nous pouvons utiliser l'exclusion grep lors de l'impression et de l'interrogation de l'historique des lignes de commande pour trouver les commandes précédemment exécutées pour trouver les correspondances par défaut, mais exclure certaines chaînes par défaut sélectionnées.

Dans l'exemple ci-dessous, nous allons imprimer l'historique des commandes pour les correspondances de chaînes par défaut, mais exclure tout ce qui correspond à iTunes, tel que défini par "com.apple.itunes":

history |grep "defaults write" |grep -v -e "com.apple.itunes"

Donc, si vous avez suivi, cela rapporterait toutes les exécutions historiques de la commande "defaults write", mais excluant tout ce qui concernait l'application iTunes. Nice hein?

Si vous avez des utilisations particulièrement utiles d'exclure des correspondances avec grep, partagez-les avec nous dans les commentaires ci-dessous! Et si vous avez aimé cet article, vous aimerez certainement parcourir nos nombreux articles en ligne de commande, où il y a encore beaucoup à apprendre!