Aller au contenu
Administration Linux medium

Maitriser la commande grep et ses variantes

16 min de lecture

Mais où se trouve ce fichier qui contient cette ligne précise ou ce message d’erreur que je dois corriger ? Quand on manipule des logs, des scripts ou de grandes bases de fichiers texte, retrouver rapidement une information enfouie devient essentiel. C’est là que la commande grep entre en jeu : elle permet de rechercher des motifs textuels avec précision, qu’ils soient simples ou complexes, dans un ou plusieurs fichiers à la fois. Grâce à ses nombreuses options, grep est l’outil idéal pour trouver une occurrence précise, filtrer des résultats ou diagnostiquer un problème, sans perdre de temps.

La commande grep (pour Global Regular Expression Print) est un outil de recherche textuelle incontournable en ligne de commande. Elle permet de parcourir rapidement des fichiers ou des flux de texte pour y extraire les lignes contenant un motif précis, qu’il s’agisse d’un mot, d’une phrase, d’un code ou d’un message d’erreur.

Elle est particulièrement utilisée pour :

  • trouver une information précise dans un fichier de log,
  • rechercher un mot-clé ou une fonction dans du code source,
  • filtrer les lignes d’un fichier CSV ou d’un export brut,
  • tracer une erreur dans un répertoire contenant des milliers de fichiers.

Par exemple, pour rechercher les lignes contenant le mot “ERREUR” dans un fichier :

Fenêtre de terminal
grep "ERREUR" journal.log

Pour chercher ce mot dans tous les fichiers d’un dossier :

Fenêtre de terminal
grep "ERREUR" /var/log/*.log

Et pour ignorer la casse :

Fenêtre de terminal
grep -i "erreur" journal.log

grep est rapide, léger et s’utilise facilement enchaîné avec d’autres commandes dans un pipeline. C’est un outil de diagnostic et d’extraction de données textuelles indispensable pour tout administrateur système, développeur ou analyste.

La commande grep suit une structure simple mais puissante, adaptée à des recherches rapides ou complexes dans un ou plusieurs fichiers.

Fenêtre de terminal
grep [options] motif fichier
  • motif : le texte ou l’expression régulière à rechercher
  • fichier : un ou plusieurs fichiers dans lesquels effectuer la recherche
  • options : modifient le comportement de grep (casse, contexte, récursivité…)

Rechercher toutes les lignes contenant “Erreur” dans un fichier :

Fenêtre de terminal
grep "Erreur" journal.log
Fenêtre de terminal
grep "root" /etc/passwd /etc/group

Affiche les lignes correspondantes avec le nom du fichier source.

On peut filtrer les résultats d’une autre commande :

Fenêtre de terminal
dmesg | grep "usb"

Pour chercher dans tous les fichiers .log :

Fenêtre de terminal
grep "timeout" *.log

Attention : les jokers sont gérés par le shell, pas par grep lui-même.

Avec cette syntaxe de base, grep devient un outil ultra-réactif pour isoler des lignes précises dans de grands volumes de texte. Les options abordées dans les chapitres suivants permettent de personnaliser et d’affiner encore plus vos recherches.

Dans sa forme la plus directe, grep permet de rechercher un mot ou une expression littérale dans un ou plusieurs fichiers. C’est la base de tout usage de grep.

Fenêtre de terminal
grep "Erreur" fichier.log

Cela affiche toutes les lignes contenant le mot ou une partie de mot “Erreur”.

Fenêtre de terminal
grep "backup" *.conf

Affiche les lignes correspondantes avec le nom du fichier.

Fenêtre de terminal
grep -i "apache" /etc/*conf

Cette option permet de trouver “Apache”, “apache”, ou “APACHE” sans distinction.

Afficher les lignes correspondantes avec leur numéro (-n)

Section intitulée « Afficher les lignes correspondantes avec leur numéro (-n) »
Fenêtre de terminal
grep -n "Listen" /etc/apache2/ports.conf

Affiche chaque ligne avec son numéro dans le fichier.

Fenêtre de terminal
grep "^$" fichier.txt
  • ^ : début de ligne
  • $ : fin de ligne
  • ^$ : ligne vide

Pour éviter de capturer les mots partiels :

Fenêtre de terminal
grep -w "user" fichier.txt

Cette commande ne trouve que les lignes contenant user, pas username.

Ces recherches simples couvrent la majorité des usages quotidiens de grep, et suffisent souvent pour isoler rapidement un bloc de texte ou vérifier une configuration sans ouvrir tout le fichier.

Pour affiner vos recherches, grep propose de nombreuses options avancées permettant de contrôler le comportement de l’affichage, de filtrer plus précisément les résultats, ou de travailler avec des fichiers plus complexes.

Fenêtre de terminal
grep -i "server" config.txt

Trouve “server”, “Server”, “SERVER”, etc.

Fenêtre de terminal
grep -w "port" fichier.conf

Évite de capturer des mots partiels comme “airport” ou “import”.

Fenêtre de terminal
grep -n "Listen" ports.conf

Affiche les lignes trouvées avec leur numéro dans le fichier.

Fenêtre de terminal
grep -o "ERROR [0-9]*" log.txt

Affiche seulement le texte correspondant au motif et non toute la ligne.

Fenêtre de terminal
grep -c "ERROR" log.txt

Renvoie le nombre de lignes contenant le motif, utile pour des statistiques simples.

Afficher le nom des fichiers contenant le motif : -l

Section intitulée « Afficher le nom des fichiers contenant le motif : -l »
Fenêtre de terminal
grep -l "root" /etc/*

Affiche uniquement le nom des fichiers contenant au moins une occurrence.

Afficher les fichiers ne contenant pas le motif : -L

Section intitulée « Afficher les fichiers ne contenant pas le motif : -L »
Fenêtre de terminal
grep -L "enabled" *.conf

Montre les fichiers ne contenant aucune occurrence du motif.

Ces options permettent d’adapter grep à des recherches ciblées, des vérifications automatisées, ou des extractions précises, notamment dans des fichiers volumineux ou multiples.

grep ne se limite pas à afficher les lignes contenant un motif : il peut aussi exclure des lignes ou montrer le contexte autour des correspondances, ce qui est très utile pour le débogage ou la compréhension d’un fichier.

Pour afficher toutes les lignes ne contenant pas un mot :

Fenêtre de terminal
grep -v "DEBUG" application.log

Cette commande est parfaite pour filtrer les lignes inutiles ou parasites dans un log.

Fenêtre de terminal
grep -A 2 "ERROR" journal.log

Affiche 2 lignes après chaque ligne contenant “ERROR”.

Fenêtre de terminal
grep -B 3 "FAILURE" output.txt

Affiche les 3 lignes précédant chaque occurrence.

-C [n] : lignes avant et après (contexte complet)

Section intitulée « -C [n] : lignes avant et après (contexte complet) »
Fenêtre de terminal
grep -C 1 "timeout" log.txt

Affiche la ligne contenant le mot et une ligne de contexte avant et après.

Afficher toutes les erreurs mais ignorer les lignes “benignes”, avec contexte :

Fenêtre de terminal
grep -i "error" log.txt | grep -v "non critique"

Ces options contextuelles rendent grep très utile pour les diagnostics, car elles permettent de voir ce qui entoure un message d’erreur, une alerte ou un comportement suspect, sans ouvrir tout le fichier.

Quand on travaille dans une arborescence complexe ou sur un projet contenant de nombreux fichiers, grep permet d’effectuer des recherches récursives et de cibler précisément les fichiers concernés.

Rechercher le mot “TODO” dans tous les fichiers d’un projet :

Fenêtre de terminal
grep -r "TODO" .
  • -r ou -R : descente récursive dans les sous-dossiers.

Pour ne rechercher que dans les fichiers .py :

Fenêtre de terminal
grep "import" $(find . -name "*.py")

Ou en combinant find et xargs :

Fenêtre de terminal
find . -name "*.sh" | xargs grep "echo"

Afficher uniquement le nom des fichiers contenant une correspondance : -l

Section intitulée « Afficher uniquement le nom des fichiers contenant une correspondance : -l »
Fenêtre de terminal
grep -rl "mot_de_passe" /etc/

Affiche la liste des fichiers contenant au moins une occurrence, sans contenu.

Rechercher dans tous les fichiers, même binaires : --binary-files=text

Section intitulée « Rechercher dans tous les fichiers, même binaires : --binary-files=text »

Par défaut, grep ignore les fichiers binaires. Pour forcer la recherche :

Fenêtre de terminal
grep --binary-files=text "clé" fichier.dump

Avec ces options, grep devient un outil d’audit et d’analyse massif, capable de balayer efficacement un projet ou un serveur à la recherche d’une expression, d’un code d’erreur, ou d’une trace laissée dans les fichiers.

L’un des plus grands atouts de grep est sa compatibilité avec les expressions régulières, qui permettent de faire des recherches avancées, souples et précises, au-delà du simple texte littéral.

ExpressionSignification
.Un seul caractère quelconque
*Zéro ou plusieurs occurrences
^Début de ligne
$Fin de ligne
[...]Un seul caractère parmi ceux listés
[^...]Un seul caractère non listé
\Échappe un caractère spécial (\. pour un point)
  • Lignes commençant par Erreur :

    Fenêtre de terminal
    grep "^Erreur" fichier.log
  • Lignes se terminant par .conf :

    Fenêtre de terminal
    grep "\.conf$" fichiers.txt
  • Lignes contenant un chiffre :

    Fenêtre de terminal
    grep "[0-9]" fichier.txt

Expressions régulières étendues avec grep -E ou egrep

Section intitulée « Expressions régulières étendues avec grep -E ou egrep »

Pour aller plus loin (groupes, alternances, etc.) :

Fenêtre de terminal
grep -E "(erreur|warning)" fichier.log

Ou avec egrep, équivalent de grep -E :

Fenêtre de terminal
egrep "(erreur|warning)" fichier.log
  • Mot contenant au moins trois chiffres :

    Fenêtre de terminal
    grep -E "[0-9]{3,}" fichier.txt
  • Lignes contenant “Nom: [texte]” :

    Fenêtre de terminal
    grep -E "Nom: .+" fichier.txt

Expressions régulières Perl avec grep -P (si supporté)

Section intitulée « Expressions régulières Perl avec grep -P (si supporté) »

Pour des motifs plus complexes :

Fenêtre de terminal
grep -P "\buser\d{2}\b" fichier.txt

Attention : -P (mode Perl) n’est pas disponible sur toutes les distributions.

Avec les expressions régulières, grep devient un analyseur de texte très précis, capable de traiter des fichiers structurés, semi-structurés ou non structurés avec une efficacité redoutable.

La commande grep possède plusieurs variantes utiles selon le type de données, le niveau de complexité ou le contexte d’utilisation. Voici les principales :

egrep – Grep avec expressions régulières étendues

Section intitulée « egrep – Grep avec expressions régulières étendues »

Équivalent à grep -E, il permet d’utiliser des expressions plus puissantes :

Fenêtre de terminal
egrep "Erreur|Alerte" fichier.log

Permet l’utilisation directe des opérateurs comme |, +, ?, {} sans les échapper.

Remarque : egrep est considéré comme obsolète, on recommande grep -E à la place.

Équivalent à grep -F, il recherche des chaînes exactes sans interpréter les métacaractères :

Fenêtre de terminal
fgrep "1.2.3.4" journal.log
  • Plus rapide que grep classique pour des recherches très simples
  • Ne supporte aucune expression régulière

Permet de rechercher dans les fichiers gzip sans décompression manuelle :

Fenêtre de terminal
zgrep "ERREUR" archive.log.gz
  • Compatible avec les mêmes options que grep
  • Très utile pour les logs archivés

Contrairement aux autres, pgrep n’analyse pas les fichiers mais les processus en cours :

Fenêtre de terminal
pgrep ssh

Affiche les PID des processus contenant “ssh” dans leur nom.

Pour afficher les noms des processus :

Fenêtre de terminal
pgrep -a nginx

Chaque variante de grep est optimisée pour un cas d’usage spécifique. Les connaître permet de choisir l’outil le plus efficace selon le contexte : traitement de logs, audit de processus, ou filtrage massif.

Voici plusieurs exemples concrets montrant comment grep et ses variantes peuvent être utilisés pour résoudre des problèmes réels, analyser des fichiers, ou automatiser des recherches dans un environnement système ou de développement.

1. Rechercher des erreurs dans les journaux système

Section intitulée « 1. Rechercher des erreurs dans les journaux système »
Fenêtre de terminal
grep -i "error" /var/log/syslog

Affiche toutes les erreurs, quelle que soit la casse.

Pour voir les erreurs avec 3 lignes de contexte avant et après :

Fenêtre de terminal
grep -C 3 "error" /var/log/syslog

2. Rechercher des directives dans un fichier de configuration

Section intitulée « 2. Rechercher des directives dans un fichier de configuration »
Fenêtre de terminal
grep "^Listen" /etc/apache2/ports.conf

Permet de savoir sur quel port Apache écoute.

3. Vérifier l’absence d’un mot de passe en clair dans des scripts

Section intitulée « 3. Vérifier l’absence d’un mot de passe en clair dans des scripts »
Fenêtre de terminal
grep -r "password=" ~/scripts/

Recherche récursive dans tous les scripts du dossier personnel.

4. Compter le nombre d’occurrences d’un événement

Section intitulée « 4. Compter le nombre d’occurrences d’un événement »
Fenêtre de terminal
grep -c "connection lost" application.log

Affiche combien de fois un événement s’est produit.

Fenêtre de terminal
grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' serveur.log

Avec -o pour afficher uniquement les correspondances.

Fenêtre de terminal
zgrep "backup failed" archive.log.gz

Sans devoir décompresser le fichier.

7. Identifier les fichiers contenant un mot spécifique

Section intitulée « 7. Identifier les fichiers contenant un mot spécifique »
Fenêtre de terminal
grep -rl "admin" /etc/

Affiche la liste des fichiers contenant le mot admin.

Ces cas d’usage montrent que grep est bien plus qu’une simple commande de recherche : il devient un véritable outil d’inspection, d’audit et de contrôle du système et des fichiers. Indispensable dans les tâches de maintenance et de surveillance.

Pour utiliser grep de manière efficace, fiable et lisible, voici quelques bonnes pratiques que j’applique dans mes propres scripts et recherches en ligne de commande.

1. Toujours tester avec un fichier simple avant de lancer une recherche large

Section intitulée « 1. Toujours tester avec un fichier simple avant de lancer une recherche large »

Avant de lancer une commande sur tout /var/log ou un projet entier :

Fenêtre de terminal
grep "motif" fichier_test.txt

Cela permet d’éviter des surprises liées à des correspondances inattendues ou des motifs mal formulés.

Surtout quand le motif contient des espaces, des caractères spéciaux, ou des jokers :

Fenêtre de terminal
grep "adresse IP" fichier.log

3. Privilégier grep -E pour les expressions complexes

Section intitulée « 3. Privilégier grep -E pour les expressions complexes »

Plutôt que d’échapper tous les caractères spéciaux, utilisez :

Fenêtre de terminal
grep -E "erreur|fail|critique" journal.log

Plus lisible et plus propre que plusieurs grep enchaînés.

4. Combiner intelligemment avec find, xargs, ou sed

Section intitulée « 4. Combiner intelligemment avec find, xargs, ou sed »

Rechercher dans certains types de fichiers :

Fenêtre de terminal
find . -name "*.log" | xargs grep "ERREUR"
  • -v pour exclure des lignes :

    Fenêtre de terminal
    grep -v "DEBUG" fichier.log
  • -w pour éviter les faux positifs sur des sous-mots :

    Fenêtre de terminal
    grep -w "root" /etc/passwd

Pour des recherches complexes ou multiples :

Fenêtre de terminal
grep -f motifs.txt fichiers.txt

Le fichier motifs.txt contient un motif par ligne.

7. Coloriser les résultats pour les rendre plus lisibles

Section intitulée « 7. Coloriser les résultats pour les rendre plus lisibles »

La plupart des systèmes activent cette option par défaut, sinon :

Fenêtre de terminal
grep --color=always "motif" fichier

En appliquant ces bonnes pratiques, vous rendrez vos commandes grep plus sûres, plus lisibles et plus puissantes, que ce soit pour une recherche rapide ou intégrée dans un processus automatisé.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

10 questions
5 min.
80%

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

La commande grep est bien plus qu’un simple outil de recherche textuelle : c’est un véritable allié pour explorer, analyser et diagnostiquer le contenu de vos fichiers en ligne de commande. Grâce à sa vitesse, sa simplicité d’usage et sa richesse fonctionnelle, grep s’adapte aussi bien aux besoins ponctuels qu’aux scripts les plus complexes. En la combinant avec d’autres outils Unix, elle devient une composante essentielle du quotidien de tout administrateur système, développeur ou analyste.