Loupe numérique mettant en évidence des fichiers parmi de nombreuses données sur un ordinateur Linux

Commande grep Linux : syntaxe, options et exemples pratiques

User avatar placeholder
Écrit par Vincent

22 juillet 2026

La commande grep Linux est l’un des outils en ligne de commande les plus utilisés : elle recherche du texte dans un ou plusieurs fichiers à partir d’un motif, simple ou en expression régulière, et affiche les lignes correspondantes. Ce guide couvre la syntaxe, toutes les options utiles, des exemples pratiques du plus simple au plus avancé (pipelines, scripts, expressions régulières), le dépannage des erreurs fréquentes et une FAQ complète. Commandes prêtes à copier.

L’essentiel
Commande clé : grep -rin "motif" dossier/ — recherche récursive, insensible à la casse, avec numéros de ligne.
Prérequis : un accès terminal. Aucun paquet à installer.
Portée : universelle, toutes distributions (GNU coreutils / paquet grep).
Sources : manuel GNU grep et page de manuel man7.org, consultées le 20 juillet 2026.

Table des matières

Qu’est-ce que la commande grep Linux ?

Le nom vient de la commande de l’éditeur ed : g/re/p, pour globally search for a regular expression and print. L’expansion « Global Regular Expression Print » est un rétro-acronyme répandu, absent de la documentation GNU. La commande grep Linux fait partie du paquet GNU grep, installé par défaut sur la quasi-totalité des distributions : Ubuntu, Debian, Fedora, Arch Linux, openSUSE. Elle lit un fichier ou un flux ligne par ligne et affiche celles qui correspondent au motif recherché.

grep peut aussi lire directement l’entrée standard, ce qui permet de la chaîner avec d’autres commandes via un pipe (|). Cette capacité de filtrage fait de la commande grep Linux un outil quotidien pour analyser des journaux système, fouiller du code source ou surveiller des processus.

Pour vérifier la version installée :

grep --version

La version varie selon la distribution et la date de la dernière mise à jour. Les exemples de ce mémo reposent sur la syntaxe documentée dans le manuel officiel GNU grep et ne dépendent d’aucune version particulière.

Syntaxe de base de la commande grep Linux

grep [OPTIONS] MOTIF FICHIER

MOTIF est la chaîne ou l’expression régulière recherchée, et FICHIER peut désigner un ou plusieurs fichiers. Sans fichier précisé, grep lit l’entrée standard, ce qui permet de l’utiliser en sortie d’un pipe.

grep "erreur" /var/log/syslog

Cette commande affiche toutes les lignes de syslog contenant le mot « erreur ». Par défaut, grep est sensible à la casse : « Erreur » ne serait pas trouvé.

Options principales de la commande grep Linux

Infographie des options essentielles de la commande grep Linux : -i, -r, -n, -v, -E et -F
OptionDescriptionExemple
-iIgnore la casse (majuscules/minuscules)grep -i "erreur" fichier.log
-vInverse la recherche : affiche les lignes qui ne correspondent pasgrep -v "^#" fichier.conf
-r / -RRecherche récursive dans un dossier (-R suit aussi les liens symboliques)grep -r "TODO" ./projet/
-nAffiche le numéro de ligne de chaque correspondancegrep -n "erreur" fichier.log
-cCompte le nombre de lignes correspondantesgrep -c "erreur" fichier.log
-l / -LListe les fichiers qui contiennent (ou -L : ne contiennent pas) le motifgrep -l "TODO" *.php
-wNe retient que les correspondances de mot entiergrep -w "id" fichier.txt
-xNe retient que les lignes correspondant exactement au motif entier (ici combiné à -F pour que les points ne soient pas interprétés)grep -Fx "192.168.1.1" ips.txt
-EActive les expressions régulières étendues (équivalent à egrep)grep -E "^(erreur|warning)" fichier.log
-FRecherche une chaîne littérale, sans interpréter les regexgrep -F "192.168.1.1" fichier.log
-A / -B / -CAffiche N lignes après / avant / autour de la correspondancegrep -A 3 "Exception" app.log
--colorSurligne la partie correspondante dans le terminalgrep --color "erreur" fichier.log
-oN’affiche que la partie correspondante, pas la ligne entièregrep -oE "[0-9]{1,3}" fichier.log
-qMode silencieux : aucune sortie, seul le code de retour comptegrep -q "erreur" fichier.log
-m NArrête la lecture d’un fichier après N lignes correspondantes (limite par fichier, pas globale)grep -m 5 "erreur" fichier.log
--include / --exclude-dirFiltre les fichiers ou dossiers traités, en récursif comme en ligne de commandegrep -r --include="*.php" --exclude-dir=vendor "TODO" .

grep, egrep, fgrep, rgrep et ripgrep : quelles différences ?

Plusieurs commandes gravitent autour de grep. Voici les différences concrètes entre elles :

CommandeÉquivalentUsage
grepRecherche standard, expressions régulières basiques (BRE) par défaut
egrepgrep -EExpressions régulières étendues — obsolète, préférez grep -E
fgrepgrep -FChaîne littérale — obsolète, préférez grep -F
rgrepgrep -rVariante ajoutée par Debian et Ubuntu, absente de GNU grep en amont comme de Fedora, Arch et Alpine. Utilisez grep -r pour rester portable
ripgrep (rg)Outil tiers écrit en Rust, non fourni par GNU. Ignore automatiquement .gitignore et se montre nettement plus rapide sur de très gros volumes ou de grandes arborescences

La documentation GNU grep signale que egrep et fgrep sont dépréciées et peuvent afficher un avertissement selon la distribution. Écrivez plutôt grep -E et grep -F dans vos scripts pour rester compatible avec les versions futures. Pour des recherches récurrentes sur de très gros dépôts de code, ripgrep constitue un complément intéressant à grep, sans le remplacer : grep reste l’outil universel présent nativement partout, y compris sur les serveurs où vous ne pouvez rien installer.

Exemples pratiques de la commande grep Linux

Rechercher un mot dans un fichier

grep -n "connection refused" /var/log/auth.log

L’option -n ajoute le numéro de ligne devant chaque résultat, pratique pour retrouver rapidement le contexte exact dans le fichier source.

Recherche récursive et insensible à la casse dans un projet de code

grep -rin --include="*.php" --exclude-dir={vendor,node_modules,.git} "todo" ./mon-projet/

Cette combinaison cherche « todo » (quelle que soit la casse) dans tous les fichiers .php, en excluant les dossiers de dépendances qui pollueraient les résultats. Très utile pour retrouver les tâches en attente laissées en commentaire dans un code source.

Filtrer des processus et surveiller les journaux systemd

# Trouver les processus actifs contenant "nginx"
ps aux | grep nginx

# Suivre en temps réel les tentatives de connexion SSH échouées
journalctl -u ssh -f | grep -i "failed"

# Exclure les lignes de commentaire d'un fichier de configuration
grep -v "^#" /etc/ssh/sshd_config

Pour aller plus loin sur la configuration et le durcissement du service filtré ci-dessus, consultez notre guide complet pour configurer SSH sur Linux.

Extraire des données avec les expressions régulières

# Extraire toutes les adresses IP d'un fichier de log
grep -oE "[0-9]{1,3}(.[0-9]{1,3}){3}" acces.log

# Extraire toutes les adresses e-mail d'un fichier texte
grep -oE "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}" contacts.txt

Combinée à -o, une expression régulière bien construite transforme grep en outil d’extraction de données, sans passer par un script complet.

Combiner grep, sort, uniq et wc pour des statistiques rapides

# Classer les IP responsables du plus grand nombre d'échecs SSH
grep "Failed password" /var/log/auth.log 
  | grep -oE "[0-9]{1,3}(.[0-9]{1,3}){3}" 
  | sort | uniq -c | sort -rn | head -10

Ce pipeline extrait les adresses IP des tentatives de connexion SSH échouées, les compte avec uniq -c, puis affiche les dix adresses les plus actives. C’est ce type de combinaison qui fait de grep un outil d’analyse, pas seulement de recherche. Sur une machine sollicitée, ces analyses de journaux se combinent utilement avec les outils de mesure décrits dans notre guide pour optimiser les performances de Linux.

grep et les expressions régulières : aller plus loin

Sans l’option -E, grep utilise les expressions régulières basiques (BRE) : les métacaractères ?, +, {, |, ( et ) perdent leur sens spécial et doivent être échappés avec un antislash. Avec -E (expressions étendues, ERE), ils s’utilisent directement.

# Ancres : ^ début de ligne, $ fin de ligne
grep "^Erreur" fichier.log
grep "erreur$" fichier.log

# Alternative (OR) avec regex étendue
grep -E "error|warning|critical" app.log

# Quantificateurs étendus : entre 2 et 5 chiffres consécutifs
grep -E "[0-9]{2,5}" fichier.log

La commande grep Linux propose aussi -P pour activer la syntaxe Perl (PCRE), plus proche de ce que l’on trouve en Python ou JavaScript, avec des raccourcis comme d (chiffre) ou w (caractère alphanumérique) :

grep -P "d{3}-d{4}" fichier.txt

-P n’est pas toujours disponible : certaines versions minimalistes de grep (BusyBox, par exemple) ne compilent pas le support PCRE. En cas d’erreur, repliez-vous sur -E.

Utiliser grep dans un script Bash : codes de sortie et automatisation

grep retourne un code de sortie exploitable dans un script : 0 si au moins une correspondance a été trouvée, 1 si aucune, 2 en cas d’erreur (fichier introuvable, syntaxe invalide). Une réserve importante : avec -q, le code reste 0 dès qu’une ligne correspond, même si une erreur est survenue par ailleurs. Combiné à -q (silencieux), cela permet des tests conditionnels propres :

if grep -q "erreur critique" /var/log/app.log; then
    echo "Alerte : erreur critique détectée"
    exit 1
fi

Ce type de test conditionnel s’intègre bien dans une tâche planifiée ; la méthode complète est décrite dans notre guide pour automatiser des tâches avec crontab.

Autre usage courant : agir sur chaque fichier trouvé grâce à xargs :

grep -rl "TODO" ./src/ | xargs -I{} echo "À traiter : {}"

Personnaliser la sortie de grep (couleurs et alias)

Sur la plupart des distributions, grep est déjà aliasé en grep --color=auto, ce qui surligne automatiquement les correspondances dans un terminal interactif. La variable d’environnement GREP_COLORS permet d’en personnaliser l’apparence :

# Correspondance en jaune gras
export GREP_COLORS='ms=01;33'

Attention à ne pas confondre avec GREP_COLOR au singulier, ancienne variable conservée pour compatibilité mais obsolète.

# Vérifier le rendu
grep --color=always "erreur" fichier.log

Dépannage des erreurs courantes avec grep

« grep: fichier: No such file or directory »

Cette erreur apparaît le plus souvent quand le motif contient des espaces sans être entouré de guillemets, ou quand un caractère joker n’a rencontré aucun fichier. Vérifiez toujours que le motif est entre guillemets :

# Erreur probable : le shell interprète "erreur" et "fatale" séparément
grep erreur fatale fichier.log

# Solution : englober le motif entre guillemets
grep "erreur fatale" fichier.log

« Binary file matches »

grep a détecté un fichier binaire (log compressé, encodage non standard). Forcez le traitement en texte avec -a, ou utilisez zgrep pour les archives .gz. Deux points à connaître : -a peut déverser des caractères binaires dans le terminal, et zgrep provient du paquet gzip, pas de grep — il ne prend en charge ni -r, ni --include, ni --exclude-dir. Pour chercher dans une archive plutôt que dans un fichier compressé, listez-la d’abord avec la commande tar et filtrez la sortie avec grep.

grep -a "erreur" fichier.log
zgrep "erreur" fichier.log.gz

grep ne trouve rien alors que le motif existe visiblement

Trois causes fréquentes : la casse (ajoutez -i), des espaces ou tabulations invisibles autour du motif, ou un caractère spécial de regex interprété involontairement. Utilisez -F pour forcer une recherche littérale et éliminer cette dernière hypothèse :

grep -F "192.168.1.1" fichier.log

« grep: commande introuvable » sur une image minimale

Sur une distribution classique, ce cas ne se produit pas. Sur Debian et Ubuntu, grep porte le statut Essential: yes et la priorité required : il n’est pas désinstallable sans forçage. Sur Arch, il est une dépendance du méta-paquet base. Sur Fedora et openSUSE, il est installé d’office dans le socle système, sans statut formel équivalent. L’erreur apparaît en pratique dans deux situations, toutes deux liées aux conteneurs.

Image Alpine. Alpine fournit un grep minimaliste via BusyBox, qui ne reconnaît pas toutes les options GNU. Pour obtenir la version complète, installez le paquet dédié avec apk, le gestionnaire de paquets d’Alpine :

# Alpine Linux : installer GNU grep à la place du grep BusyBox
apk add --no-cache grep

# Vérifier quelle implémentation répond
grep --version

Image distroless. Ces images ne contiennent ni shell ni gestionnaire de paquets : rien ne peut y être installé. Exécutez la recherche depuis l’hôte sur les journaux du conteneur, par exemple avec docker logs mon-conteneur | grep "erreur". Si vous découvrez l’environnement Docker, notre guide pour installer Docker sur Linux détaille la mise en place.

« grep: invalid option — P »

Le support PCRE (-P) n’est pas compilé dans toutes les variantes de grep, notamment le grep minimaliste de BusyBox utilisé sur certaines images légères. Repliez-vous sur -E, disponible partout.

Résultats incohérents avec des caractères accentués

Un problème de locale peut fausser la correspondance sur les caractères accentués. Vérifiez les locales disponibles et forcez si besoin un encodage UTF-8 cohérent :

locale -a
LC_ALL=fr_FR.UTF-8 grep "réseau" fichier.txt

grep et l’écosystème des commandes de recherche Linux

grep répond à une question précise : « quelles lignes contiennent ce motif ? ». D’autres commandes le complètent naturellement :

  • findlocalise des fichiers par nom, date ou taille, souvent combiné avec grep
  • sed — modifie du texte en place (grep trouve, sed remplace)
  • awk — extrait et traite des colonnes de texte structuré
  • ripgrep (rg) — alternative moderne écrite en Rust, très rapide sur de gros volumes

Pour gérer les droits d’accès des fichiers que vous parcourez avec grep, consultez notre mémo sur la commande chmod Linux. Pour la référence complète des options, voir le manuel officiel GNU grep et la page de manuel grep (man7.org).

FAQ — Questions fréquentes sur la commande grep Linux

Quelle est la différence entre grep et egrep ?

egrep équivaut à grep -E : il active les expressions régulières étendues, où des métacaractères comme +, ? et | s’utilisent sans échappement. egrep est considérée comme obsolète par GNU : préférez grep -E dans vos scripts.

Comment rechercher plusieurs motifs avec grep ?

Trois méthodes : grep -E "motif1|motif2" avec les regex étendues, grep -e motif1 -e motif2 en répétant l’option -e, ou grep -f fichier_motifs.txt pour lire les motifs depuis un fichier, un par ligne.

Comment exclure les lignes contenant un motif avec grep ?

Avec l’option -v, qui inverse la correspondance : grep -v "motif" fichier affiche uniquement les lignes qui ne contiennent pas le motif.

grep est-il sensible à la casse par défaut ?

Oui. Par défaut, grep distingue majuscules et minuscules. Ajoutez l’option -i pour une recherche insensible à la casse.

Comment compter le nombre d’occurrences d’un motif avec grep ?

grep -c "motif" fichier compte le nombre de lignes correspondantes, pas le nombre total d’occurrences. Pour compter chaque occurrence, même plusieurs par ligne, combinez -o avec wc -l : grep -o "motif" fichier | wc -l.

grep ou ripgrep : lequel choisir ?

grep est universel : présent nativement sur pratiquement tous les systèmes Linux, idéal pour les serveurs de production où vous ne contrôlez pas les paquets installés. ripgrep est un outil tiers plus rapide sur de très gros volumes ou de grandes arborescences de code, mais il doit être installé séparément. Les deux se complètent plutôt qu’ils ne s’opposent.

Comment utiliser grep dans une condition de script Bash ?

Utilisez -q pour supprimer la sortie et testez directement le code de retour : if grep -q "motif" fichier; then ... fi. grep renvoie 0 si le motif est trouvé, 1 sinon.

Conclusion

Cinq options de la commande grep Linux couvrent la quasi-totalité des usages quotidiens : -i pour ignorer la casse, -r pour parcourir une arborescence, -n pour situer la ligne, -v pour exclure et -E pour les expressions régulières étendues. Le réflexe à conserver : entourez toujours le motif de guillemets, et passez à -F dès qu’il contient des points, des crochets ou des parenthèses — c’est la cause n° 1 des résultats manquants.

En script, testez le code de sortie avec grep -q plutôt que d’analyser la sortie texte. Sur un serveur où vous ne contrôlez pas les paquets installés, gardez grep : il est toujours là. La suite logique passe par la gestion des permissions avec chmod pour agir sur les fichiers trouvés, et par la configuration de SSH pour analyser les journaux d’une machine distante.

Dernière vérification des commandes et des options : 20 juillet 2026, d’après le manuel officiel GNU grep et la page de manuel man7.org.

Vincent

Vincent est le créateur de MémoLinux. Venu de Windows par curiosité, il est resté sur Linux pour sa logique et le plaisir de comprendre ce qui se passe sous le capot. Il documente ici les commandes et les procédures qu’il utilise lui-même, avec leurs sources officielles et leur date de vérification.