Grep est un acronyme qui signifie Global Regular Expression Print.
C’est un outil en ligne de commande Linux / Unix utilisé pour rechercher une chaîne de caractères dans un fichier spécifié. Le modèle de recherche de texte est appelé une expression régulière (regex). Lorsqu’il trouve une correspondance, il imprime la ligne avec le résultat. La commande grep est pratique lors de la recherche dans de gros fichiers journaux.
Ce guide et tutoriel détaille les commandes grep les plus utiles pour les systèmes Linux/Unix à travers des exemples.

Table des matières
- 1 Qu’est-ce que la commande grep
- 2 Commande grep sous linux : exemples d’utilisation
- 2.1 Utilisation basique
- 2.2 Chercher un mot complet avec grep linux
- 2.3 Chercher dans un ou plusieurs fichiers ou dossiers en récursif
- 2.4 Afficher les numéros de ligne
- 2.5 Inverser la recherche pour exclure
- 2.6 Limiter le nombre de sortie
- 2.7 Afficher le nombre de lignes avant ou après une chaîne de recherche
- 2.8 Rechercher plusieurs chaînes
- 2.9 Recherche sur le nom de fichier
- 2.10 Compter le nombre d’occurence
- 2.11 Appliquer commande après grep
- 2.12 Rechercher en début ou fin de ligne
- 2.13 Coloriser le motif
- 2.14 Utiliser des expressions régulières
- 3 Liste des options de la commande grep
- 4 Liens
Qu’est-ce que la commande grep
La commande grep permet de capturer un motif dans un texte.
Le nom vient de Global Regular Expression (Processor |
Parser |
Printer).
Elle en permet pas d’effectuer de rechercher/remplacer, pour cela, il faut utiliser la commande sed :
Elle se décline en plusieurs versions : egrep, fgrep ou regrep.
Toutefois, leurs utilisations est obsolètes.
- egrep et fgrep sont des commandes obsolètes et doivent être évitées
- egrep équivaut à la commande grep -E et permet d’utiliser une regex étendue
- fgrep est équivalent à la commande grep -F et utilise une chaîne fixe pour la recherche et il effectue donc une recherche plus rapide
- Enfin rgrep est un équivalent de la commande grep -r
Plus de détails dans ce tutoriel : grep, egrep, fgrep, rgrep : Quelles sont les différences
Commande grep sous linux : exemples d’utilisation
Utilisation basique
grep peut s’utiliser directement pour rechercher un motif dans un fichier.
Mais on peut aussi l’utiliser comme toute commande Linux via un pipe.
Ainsi, ces deux utilisations sont équivalentes :
grep motif nomfichier
ou
cat nomfichier|grep motif
Pour le rendre insensible à la casse, il faut utiliser l’option -i :
grep -i vache *
Chercher un mot complet avec grep linux
Grep vous permet de rechercher et d’imprimer les résultats pour des mots entiers uniquement.
Pour rechercher le mot vache dans tous les fichiers du répertoire courant, ajoutez -w à la commande grep.
Cette option n’imprime que les lignes avec des correspondances de mots entiers et les noms des fichiers dans lesquels elle les a trouvées.
Par exemple pour rechercher le mot de vache en entier :
cat /tmp/test |grep -w vache
vacheTest ou vache. en fin de phrase ne sera pas renvoyer par la commande grep.
Chercher dans un ou plusieurs fichiers ou dossiers en récursif
grep peut recherche dans un ou plusieurs fichiers.
Si vous ne spécifiez aucune option, il va chercher dans le répertoire indiqué mais PAS dans les sous-répertoire :
Rechercher un motif dans un fichier spécifique :
grep err /var/log/messages.1
Rechercher un motif dans tout le répertoire :
grep err /var/log/*
A partir de là, il est possible de jouer sur les caractères joker des noms de fichier.
Par exemple pour rechercher toutes les erreurs dans les journaux /var/log/messages, /var/log/messages.1, ….
grep -i err /var/log/messages*
Pour inclure tous les sous-répertoires dans une recherche récursive, ajoutez l’opérateur -r à la commande grep.
grep -r vache *
Par exemple pour rechercher dans /tmp en entier incluant les sous-répertoires :
grep -r vache /tmp/*
test:vache
test:vacheTEST
Afficher les numéros de ligne
grep peut aussi afficher la ligne d’un fichier où se trouve l’occurence.
Pour cela, ajoutez l’option -n :
grep -n -r vache /tmp/*
test:1:vache
test:4:vacheTEST
Inverser la recherche pour exclure
Vous pouvez utiliser grep pour imprimer toutes les lignes qui ne correspondent pas à un modèle de caractères spécifique.
Pour inverser la recherche, ajoutez -v à une commande grep.
Pour exclure toutes les lignes contenant vache, saisissez :
grep -v vache /tmp/test
Le terminal imprime toutes les lignes qui ne contiennent pas le mot utilisé comme critère de recherche. Utilisez -i pour ignorer la casse afin d’exclure complètement le mot utilisé pour cette recherche :
grep -i -v vache /tmp/test
Limiter le nombre de sortie
Les fichiers individuels, tels que les fichiers journaux, peuvent contenir de nombreuses correspondances pour les modèles de recherche grep. Limitez le nombre de lignes dans la sortie grep en ajoutant l’option -m et un nombre à la commande.
grep -m2 vache /tmp/test
Afficher le nombre de lignes avant ou après une chaîne de recherche
Pour afficher le nombre de lignes avant ou après une chaîne de recherche, on utilise les option -A, -B et -C.
Utilisez -A et un certain nombre de lignes à afficher après un motif.
Par exemple pour afficher 3 lignes après le mot vache :
grep -A3 vache /tmp/test
Utilisez -B et un certain nombre de lignes à afficher avant un motif.
Pour afficher 3 lignes avant le mot vache :
grep -B3 vache /tmp/test
Utilisez -C et un certain nombre de lignes pour afficher avant et après le motif.
Pour afficher 3 lignes avants et après le mot vache :
grep -C3 vache /tmp/test
Rechercher plusieurs chaînes
Vous pouvez rechercher plusieurs mots à la fois.
La première méthode consiste à séparer les motifs avec l’option -e :
grep -e pattern1 -e pattern2 -e pattern3 [fichier]
Par exemple pour recherche le mot vache ou chien dans tous les fichiers de /tmp :
grep -e vache -e chien -r /tmp/*
La seconde méthode consiste à utiliser les regex étendues avec l’option -E.
Voici donc un équivalent :
grep -r -E "vache|chien" /tmp/*
Recherche sur le nom de fichier
Pour voir les noms des fichiers qui contiennent le terme de recherche, utilisez l’option -l (fichiers avec correspondance). Pour savoir quels fichiers de code source C contiennent des références au fichier d’en-tête sl.h, utilisez cette commande :
grep -l "sl.h" *.c
Compter le nombre d’occurence
Il est possible de compter le nombre d’occurrence grâce à l’option -c.
Par exemple pour compter le nombre d’erreur dans les journaux messages :
grep -c err /var/log/messages*
Appliquer commande après grep
Comme toute commande Linux, on peut appliquer la sortie à une autre commande notamment grâce au caractère pipe.
La syntaxe générale :
find . -name '[motif]' | xargs grep '[motif]'
Dans cet exemple, on dirige la sortie (stdout)* de find vers (stdin of)* grep ‘stdlib.h’ sous forme de texte.
C’est-à-dire que les noms de fichiers sont traités comme du texte). grep fait son travail habituel et trouve les lignes correspondantes dans ce texte (tous les noms de fichiers qui contiennent eux-mêmes le motif).
Le contenu des fichiers n’est jamais lu.
find . -name '*.c' | xargs grep 'stdlib.h'
On peut aussi utiliser une boucle for (ou while) pour traiter le résultat d’une commande avec grep.
Cela est pratique pour stocker une variable et passer plusieurs commandes avec.
Par exemple ici, on créer une variable mavariable pour chaque ligne du résultat de recherche grep que l’on intégère dans la boucle for.
for mavariable in `grep -r motif /tmp/*`
do
echo $mavariable
done
Rechercher en début ou fin de ligne
Pour récupérer que les lignes avec un commentaire, soit dont la ligne débute par # :
grep "^#" /etc/fichier.conf
Par exemple pour rechercher les lignes qui se terminent par un . dans fichier.txt
grep "\.$" fichier.txt
Coloriser le motif
L’option –color permet de coloriser le résultat de la sortie grep afin d’augmenter la lisibilité.
grep --color=always -i vache -r /tmp/
Utiliser des expressions régulières
grep est compatible avec trois types d’expressions régulières.
Pour passer d’une norme à l’autre :
- -G pour les expressions régulières basiques (BRE)
- -E pour les expressions régulières étendues (ERE)
- –P pour les expressions régulières PERL (PCRE)
Par exemple pour rechercher une adresse IP avec grep :
tail -20 /var/log/nginx/access.log|egrep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}"
Liste des options de la commande grep
Options | Description |
-A <NUM> | Imprimer NUM lignes de contexte de fin après les lignes correspondantes. Place une ligne contenant — entre des groupes contigus de correspondances. |
-B <NUM> | Imprimer NUM lignes de contexte principal avant de faire correspondre les lignes. Place une ligne contenant — entre des groupes contigus de correspondances. |
-C <NUM> | Imprimer NUM lignes de contexte de sortie. Place une ligne contenant –entre des groupes contigus de correspondances. |
-c | Compter le nombre d’occurences |
-e | Utilisez des MOTIFS comme motifs. Si cette option est utilisée plusieurs fois ou est combinée avec l’option -f (–file), recherchez tous les modèles donnés. Cette option peut être utilisée pour protéger un motif commençant par « – ». |
-i | Ne pas prendre en compte la case |
-E | Interprétez le motif comme une expression régulière étendue. |
-m <NUM> | Limiter le nombre d’occurrence à NUM |
-n | Afficher le numéro de la ligne dans le fichier |
-r | Rechercher en récursif |
-P | Interprétez le motif comme une expression régulière Perl. |
-v | Inversez le sens de la correspondance pour sélectionner des lignes non correspondantes. |
-w | Chercher un mot entier |
Liens
- Guide d’utilisation des expressions régulières (regex)
- Liste des commandes Linux
- 16 exemples de la commande CURL
- 6 commandes pour télécharger des fichiers en ligne de commandes sur Linux
- 10 commandes « IP » utiles pour configurer les interfaces réseau sur Linux
- sed : utilisation et exemples
- Comment utiliser sed pour rechercher et remplacer dans les fichiers
- Les commandes Linux réseaux
- Commande find linux : exemples d’utilisation pour rechercher des fichiers
- Comment lire les logs sur Linux en temps réel avec tail, multitail
- Liste des ports réseaux de connexion et fonctionnement