Comment exclure un mot avec la commande grep?

J’ai besoin de quelque chose comme

$ grep ^"mot_indésirable"LeRest

Il est possible de le faire grâce à l’option -v (pour --invert-match) de la commande grep :

$ grep -v "mot_indésirable" file | grep LeRest
  • grep -v "mot_indésirable" filtrera les lignes contenant le mot indésirable et
  • grep LeRest ne listera que les lignes contenant le motif LeRest.

Si vous vouliez afficher toutes les lignes sans le mot_indésirable. Dans ce cas, tout ce dont vous avez besoin est :

$ grep -v 'mot_indésirable' file

Le premier grep trouve le mot recherché « mot1 », le deuxième grep exclut « mot2 » :

$ grep "mot1" | grep -v "mot2"

Si votre grep supporte les expressions régulières Perl avec l’option -P, vous pouvez le faire:

$ grep -P '(?!.*mot_indésirable)LeRest' file

Exemple:

$ cat file
mot1
mot2
mot3
mot4
abc
xyz

Listons maintenant tous les mot à l’exception de mot3

$ grep -P '(?!.*mot3)mot' file
mot1
mot2
mot4

La meilleure solution consiste à utiliser :

grep -v "mot_indésirable" file

avec son équivalent en awk :

awk '!/mot_indésirable/' file