Quand on doit trouver une ligne d’erreur dans un log de plusieurs milliers de lignes, rechercher un mot-clé dans du code source ou filtrer la sortie d’une commande, grep est l’outil incontournable. Simple et puissant, grep permet de rechercher des motifs textuels (simples ou regex) et d’afficher les lignes correspondantes, directement en ligne de commande.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Rechercher un motif simple dans un fichier
- Utiliser les options essentielles -i, -v, -n, -c
- Afficher le contexte avec -A, -B, -C
- Utiliser des expressions régulières basiques et étendues (-E)
- Faire des recherches récursives avec -r
La commande grep dans l’écosystème Linux
Section intitulée « La commande grep dans l’écosystème Linux »grep fait partie des commandes de traitement de texte sous Linux. Chaque outil a sa spécialité :
| Commande | Spécialité | Quand l’utiliser |
|---|---|---|
grep | Filtrer des lignes par motif | Rechercher, filtrer, diagnostiquer |
awk | Traitement avancé de colonnes | Calculs, conditions, formats complexes |
sed | Éditer du texte en flux | Remplacer, supprimer, insérer |
cut | Extraire des colonnes | Fichiers délimités (CSV, TSV) |
find | Rechercher des fichiers | Trouver par nom, taille, date |
xargs | Transformer stdin en arguments | Chaîner commandes sur listes |
Quand utiliser grep vs awk ?
| Situation | grep | awk |
|---|---|---|
| Rechercher un mot dans un fichier | ✅ grep "mot" fichier | ✅ mais overkill |
| Ignorer la casse | ✅ grep -i "mot" | ✅ tolower() |
| Afficher les lignes contenant un pattern | ✅ Parfait | ✅ |
| Extraire une colonne spécifique | ❌ | ✅ awk '{print $2}' |
| Compter les occurrences exactes | ❌ -c compte les lignes | ✅ |
| Calculs sur les lignes trouvées | ❌ | ✅ |
| Conditions complexes (ET, OU, IF) | ⚠️ Limité | ✅ |
Combinaisons fréquentes :
# grep + cut : filtrer puis extraire une colonnegrep 'ERROR' app.log | cut -d' ' -f4
# grep + sort + uniq : compter les types d'erreursgrep 'ERROR' app.log | cut -d':' -f2 | sort | uniq -c
# grep + xargs : agir sur les fichiers contenant un motifgrep -rl 'TODO' src/ | xargs -I{} echo "Fichier à traiter: {}"
# grep + wc : compter les lignes correspondantesgrep -c 'ERROR' *.log | grep -v ':0$'Comprendre la commande grep en 2 min
Section intitulée « Comprendre la commande grep en 2 min »🧠 Modèle mental — Comment fonctionne grep
grep = Définir l'entrée → Spécifier le motif → Obtenir les lignes correspondantes
Points clés
- grep filtre les lignes contenant un motif (texte ou regex)
- Sans fichier, grep lit depuis stdin (pipe)
- Par défaut, la recherche est sensible à la casse
- -i pour ignorer la casse, -v pour inverser (lignes sans le motif)
- -n affiche les numéros de lignes, -c compte les occurrences
- grep -E (ou egrep) active les regex étendues (|, +, ?, etc.)
Règles d'or
Vocabulaire essentiel
- -i
- Ignorer la casse (case-insensitive)
- -v
- Inverser : lignes SANS le motif
- -n
- Afficher les numéros de ligne
- -c
- Compter les lignes (pas les occurrences)
- -r
- Recherche récursive dans les dossiers
- -l
- Afficher uniquement les noms de fichiers
📚 Pour aller plus loin — 6 options avancées
- -E
- Regex étendues (egrep)
- -w
- Mot entier uniquement
- -o
- Afficher uniquement la correspondance
- -A N
- N lignes après chaque match
- -B N
- N lignes avant chaque match
- -C N
- N lignes de contexte (avant et après)
grep lit le fichier ou stdin ligne par ligne, teste si le motif est présent, puis affiche les lignes correspondantes sur stdout.
Syntaxe minimale
Section intitulée « Syntaxe minimale »grep [OPTIONS] MOTIF [FICHIER...]Les modes de recherche
Section intitulée « Les modes de recherche »grep propose plusieurs modes selon le type de motif :
| Mode | Commande | Usage | Exemple |
|---|---|---|---|
| Texte simple | grep | Motifs littéraux | grep "ERROR" log.txt |
| Regex basique (BRE) | grep | Métacaractères basiques | grep "^[0-9]" file |
| Regex étendue (ERE) | grep -E | |, +, ?, () sans échappement | grep -E "a|b" |
| Texte littéral | grep -F | Désactive les regex | grep -F "*.txt" file |
Les options essentielles
Section intitulée « Les options essentielles »| Option | Effet | Exemple |
|---|---|---|
-i | Ignorer la casse | grep -i "error" |
-v | Inverser (lignes sans le motif) | grep -v "DEBUG" |
-n | Afficher les numéros de ligne | grep -n "ERROR" |
-c | Compter les lignes | grep -c "ERROR" |
-l | Afficher uniquement les noms de fichiers | grep -l "TODO" |
-r | Recherche récursive | grep -r "TODO" src/ |
-w | Mot entier uniquement | grep -w "port" |
-o | Afficher uniquement la correspondance | grep -o "[0-9]*" |
Afficher le contexte
Section intitulée « Afficher le contexte »Pour comprendre le contexte d’une correspondance (crucial pour le débogage) :
| Option | Effet | Exemple |
|---|---|---|
-A N | N lignes après (After) | grep -A 3 "ERROR" |
-B N | N lignes avant (Before) | grep -B 2 "ERROR" |
-C N | N lignes avant et après (Context) | grep -C 2 "ERROR" |
# Voir ce qui s'est passé avant et après une erreurgrep -C 3 "Exception" application.log
# Afficher le contexte après chaque erreur (stack trace)grep -A 10 "ERROR" app.logExpressions régulières basiques
Section intitulée « Expressions régulières basiques »| Pattern | Signification | Exemple |
|---|---|---|
^motif | Début de ligne | grep "^ERROR" |
motif$ | Fin de ligne | grep "done$" |
. | Un caractère quelconque | grep "err.r" |
* | Zéro ou plus du précédent | grep "ab*c" |
[abc] | Un parmi a, b ou c | grep "[aeiou]" |
[^abc] | Aucun parmi a, b ou c | grep "[^0-9]" |
\<mot\> | Mot entier (BRE) | grep "\<port\>" |
Expressions régulières étendues (-E)
Section intitulée « Expressions régulières étendues (-E) »Avec -E (ou egrep), les métacaractères avancés sont disponibles sans échappement :
| Pattern | Signification | Exemple |
|---|---|---|
a|b | a OU b | grep -E "ERROR|WARNING" |
+ | Un ou plus du précédent | grep -E "[0-9]+" |
? | Zéro ou un du précédent | grep -E "colou?r" |
(abc) | Groupement | grep -E "(ab)+" |
{n,m} | Entre n et m répétitions | grep -E "[0-9]{2,4}" |
# Trouver ERROR ou WARNING ou CRITICALgrep -E "ERROR|WARNING|CRITICAL" app.log
# Trouver les lignes avec un numéro de 2 à 4 chiffresgrep -E "[0-9]{2,4}" data.txt
# Extraire les adresses IPgrep -oE "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" access.logRecherche récursive dans un projet
Section intitulée « Recherche récursive dans un projet »# Tous les fichiers du dossier courantgrep -r "TODO" .
# Avec numéros de lignegrep -rn "FIXME" src/
# Uniquement les noms de fichiersgrep -rl "password" /etc/
# Exclure certains dossiersgrep -r "TODO" --exclude-dir={node_modules,.git} .
# Filtrer par extensiongrep -r "import" --include="*.py" .Erreurs typiques (et solutions)
Section intitulée « Erreurs typiques (et solutions) »| Erreur | Cause | Solution |
|---|---|---|
| Aucun résultat | Casse différente | Utiliser -i |
| Résultats partiels | Correspondance sous-chaîne | Utiliser -w pour mot entier |
| Regex non reconnue | grep basique | Utiliser -E pour regex étendues |
| ”Binary file matches” | Fichier binaire détecté | Utiliser -a pour forcer texte |
| grep se trouve lui-même | ps | grep | Ajouter | grep -v grep |
Les Modèles de recherche courants
Section intitulée « Les Modèles de recherche courants »Maintenant que vous comprenez la logique de grep, voici des modèles courants
pour des recherches fréquentes.
Ces recettes couvrent les cas d'usage les plus fréquents. Cliquez sur un pattern pour voir la formule complète et un exemple prêt à copier.
Recherche simple Base Trouver les lignes contenant un mot.
grep "ERROR" application.log
grep "MOTIF" <fichier> grep "ERROR" application.log -
MOTIF— Texte ou expression régulière à rechercher
Ignorer la casse Base Trouver sans distinction majuscules/minuscules.
grep -i "error" logs.txt
grep -i "MOTIF" <fichier> grep -i "error" logs.txt -
-i— Case-insensitive
Exclure un motif Base Afficher les lignes qui NE contiennent PAS le motif.
grep -v "DEBUG" application.log
grep -v "MOTIF" <fichier> grep -v "DEBUG" application.log -
-v— Inversion : tout sauf le motif
Compter les lignes Base Compter le nombre de lignes correspondantes.
grep -c "ERROR" application.log
grep -c "MOTIF" <fichier> grep -c "ERROR" application.log -
-c— Retourne uniquement le compte
Avec numéros de lignes Base Voir à quelles lignes se trouvent les correspondances.
grep -n "ERROR" application.log
grep -n "MOTIF" <fichier> grep -n "ERROR" application.log -
-n— Préfixe chaque ligne par son numéro
Contexte après le match Inter. Voir N lignes après chaque correspondance.
grep -A 3 "Exception" error.log
grep -A N "MOTIF" <fichier> grep -A 3 "Exception" error.log -
-A N— N lignes après (After)
Contexte avant le match Inter. Voir N lignes avant chaque correspondance.
grep -B 2 "FAILURE" job.log
grep -B N "MOTIF" <fichier> grep -B 2 "FAILURE" job.log -
-B N— N lignes avant (Before)
Contexte avant et après Inter. Voir N lignes avant et après chaque correspondance.
grep -C 2 "timeout" network.log
grep -C N "MOTIF" <fichier> grep -C 2 "timeout" network.log -
-C N— N lignes de contexte (Context)
Mot entier uniquement Base Éviter les correspondances partielles.
grep -w "port" config.conf
grep -w "MOTIF" <fichier> grep -w "port" config.conf -
-w— Mot entier (word boundary)
Recherche récursive Base Chercher dans tous les fichiers d'un répertoire.
grep -r "TODO" ./src/
grep -r "MOTIF" <dossier> grep -r "TODO" ./src/ -
-r— Récursif dans les sous-dossiers
Noms de fichiers uniquement Inter. Lister les fichiers contenant le motif.
grep -rl "password" /etc/
grep -l "MOTIF" <fichiers> grep -rl "password" /etc/ -
-l— Liste uniquement les noms de fichiers
Regex étendues (alternance) Inter. Chercher plusieurs motifs avec OU.
grep -E "ERROR|WARNING|CRITICAL" app.log
grep -E "MOTIF1|MOTIF2" <fichier> grep -E "ERROR|WARNING|CRITICAL" app.log -
-E— Active les regex étendues -
|— Alternance (OU)
Afficher uniquement le match Avancé Extraire uniquement la partie correspondante.
grep -oE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" access.log
grep -o "PATTERN" <fichier> grep -oE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" access.log -
-o— Affiche uniquement la correspondance
Exclure les commentaires Inter. Ignorer les lignes de commentaires dans les configs.
grep -v "^#" config.conf | grep -v "^$"
grep -v "^#" <fichier> | grep -v "^$" grep -v "^#" config.conf | grep -v "^$" -
^#— Lignes commençant par # -
^$— Lignes vides
Pipeline de filtrage Base Filtrer la sortie d'une autre commande.
ps aux | grep nginx
<commande> | grep "MOTIF" ps aux | grep nginx -
pipe— grep filtre la sortie d'une commande
Recherche multi-fichiers Base Chercher dans plusieurs fichiers à la fois.
grep "server" *.conf
grep "MOTIF" <fichier1> <fichier2> ... grep "server" *.conf -
*— Joker shell pour plusieurs fichiers
Aucune recette ne correspond à votre recherche.
Les Pièges à éviter
Section intitulée « Les Pièges à éviter »Ces erreurs courantes peuvent faire perdre du temps ou causer des dégâts. Les pièges les plus critiques sont affichés en premier.
Motif sans guillemets grep *.log fichier.txt (le * est interprété par le shell)
Attention
grep *.log fichier.txt (le * est interprété par le shell)
grep "*.log" fichier.txt Regex basique vs étendue grep "ERROR|WARNING" ne fonctionne pas
Attention
grep "ERROR|WARNING" ne fonctionne pas
grep -E "ERROR|WARNING" fichier.log Caractères spéciaux non échappés grep "prix: 10$" cherche "10" en fin de ligne
Attention
grep "prix: 10$" cherche "10" en fin de ligne
grep -F "prix: 10$" fichier.txt Correspondance partielle indésirable grep "port" trouve aussi "import", "export", "support"
Attention
grep "port" trouve aussi "import", "export", "support"
grep -w "port" config.conf Oubli de -i pour la casse grep "error" fichier.log ne trouve pas "ERROR"
Info
grep "error" fichier.log ne trouve pas "ERROR"
grep -i "error" fichier.log grep se trouve lui-même ps aux | grep nginx affiche aussi la ligne "grep nginx"
Info
ps aux | grep nginx affiche aussi la ligne "grep nginx"
ps aux | grep nginx | grep -v grep -c compte les lignes, pas les occurrences grep -c "mot" compte 2 même si "mot" apparaît 5 fois sur 2 lignes
Info
grep -c "mot" compte 2 même si "mot" apparaît 5 fois sur 2 lignes
grep -o "mot" fichier.txt | wc -l Fichiers binaires ignorés grep dans un fichier binaire affiche "Binary file matches"
Info
grep dans un fichier binaire affiche "Binary file matches"
grep -a "motif" fichier.bin Cheatsheet
Section intitulée « Cheatsheet » 📋
Cheatsheet grep
📝 Syntaxe :
grep "motif" fichier Recherche simple 🚀 Commandes types :
grep "ERROR" application.log grep -i "error" logs.txt grep -v "DEBUG" application.log grep -c "ERROR" application.log grep -n "ERROR" application.log ⚙️ Options
grep -i | Ignorer la casse | grep -i "error" log.txt |
grep -v | Inverser (exclure) | grep -v "DEBUG" log.txt |
grep -n | Numéros de lignes | grep -n "ERROR" log.txt |
grep -c | Compter les lignes | grep -c "ERROR" log.txt |
grep -w | Mot entier | grep -w "port" config |
grep -l | Noms de fichiers uniquement | grep -rl "TODO" . |
grep -r | Recherche récursive | grep -r "TODO" src/ |
grep -o | Afficher uniquement le match | grep -o "IP: [0-9.]*" |
grep -A N | N lignes après | grep -A 3 "ERROR" |
grep -B N | N lignes avant | grep -B 2 "ERROR" |
grep -C N | N lignes contexte | grep -C 2 "ERROR" |
grep -E | Regex étendues | grep -E "a|b" |
grep -F | Texte littéral (pas regex) | grep -F "*.txt" |
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
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
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
Conclusion
Section intitulée « Conclusion »La commande grep est l’outil de recherche textuelle le plus utilisé sous Linux. Sa syntaxe simple (grep "motif" fichier) couvre 80% des besoins quotidiens. Les options -i (casse), -v (inverser), -n (numéros), -r (récursif) et -E (regex étendues) permettent de couvrir les cas avancés. Pour du traitement plus complexe (extraction de colonnes, calculs), combinez grep avec awk ou cut.