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 seize modèles prêts à l'emploi. Chacun donne sa formule générale et un exemple concret.
Recherche simple
Section intitulée « Recherche simple »Trouver les lignes contenant un mot.
grep "MOTIF" <fichier> # formulegrep "ERROR" application.log # exempleMOTIF: texte ou expression régulière à rechercher
Ignorer la casse
Section intitulée « Ignorer la casse »Trouver sans distinction majuscules / minuscules.
grep -i "MOTIF" <fichier> # formulegrep -i "error" logs.txt # exemple-i: recherche insensible à la casse
Exclure un motif
Section intitulée « Exclure un motif »Afficher les lignes qui ne contiennent pas le motif.
grep -v "MOTIF" <fichier> # formulegrep -v "DEBUG" application.log # exemple-v: inverse la sélection
Compter les lignes
Section intitulée « Compter les lignes »Compter le nombre de lignes correspondantes.
grep -c "MOTIF" <fichier> # formulegrep -c "ERROR" application.log # exemple-c: renvoie uniquement le compte, pas les lignes
Avec numéros de lignes
Section intitulée « Avec numéros de lignes »Voir à quelles lignes se trouvent les correspondances.
grep -n "MOTIF" <fichier> # formulegrep -n "ERROR" application.log # exemple-n: préfixe chaque ligne par son numéro
Contexte après le match
Section intitulée « Contexte après le match »Voir N lignes après chaque correspondance.
grep -A N "MOTIF" <fichier> # formulegrep -A 3 "Exception" error.log # exemple-A N: N lignes après (After)
Contexte avant le match
Section intitulée « Contexte avant le match »Voir N lignes avant chaque correspondance.
grep -B N "MOTIF" <fichier> # formulegrep -B 2 "FAILURE" job.log # exemple-B N: N lignes avant (Before)
Contexte avant et après
Section intitulée « Contexte avant et après »Voir N lignes de part et d'autre de chaque correspondance.
grep -C N "MOTIF" <fichier> # formulegrep -C 2 "timeout" network.log # exemple-C N: N lignes de contexte (Context)
Mot entier uniquement
Section intitulée « Mot entier uniquement »Éviter les correspondances partielles.
grep -w "MOTIF" <fichier> # formulegrep -w "port" config.conf # exemple-w: impose une frontière de mot
Recherche récursive
Section intitulée « Recherche récursive »Chercher dans tous les fichiers d'un répertoire.
grep -r "MOTIF" <dossier> # formulegrep -r "TODO" ./src/ # exemple-r: descend dans les sous-dossiers
Noms de fichiers uniquement
Section intitulée « Noms de fichiers uniquement »Lister les fichiers contenant le motif, sans afficher les lignes.
grep -l "MOTIF" <fichiers> # formulegrep -rl "password" /etc/ # exemple-l: n'affiche que les chemins de fichiers
Regex étendues (alternance)
Section intitulée « Regex étendues (alternance) »Chercher plusieurs motifs avec un OU.
grep -E "MOTIF1|MOTIF2" <fichier> # formulegrep -E "ERROR|WARNING|CRITICAL" app.log # exemple-E: active les regex étendues|: alternance (OU)
Afficher uniquement le match
Section intitulée « Afficher uniquement le match »Extraire uniquement la partie correspondante, pas la ligne entière.
grep -o "PATTERN" <fichier> # formulegrep -oE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" access.log # exemple-o: affiche uniquement la correspondance
Exclure les commentaires
Section intitulée « Exclure les commentaires »Ignorer les lignes de commentaires et les lignes vides d'un fichier de configuration.
grep -v "^#" <fichier> | grep -v "^$" # formulegrep -v "^#" config.conf | grep -v "^$" # exemple^#: lignes commençant par#^$: lignes vides
Pipeline de filtrage
Section intitulée « Pipeline de filtrage »Filtrer la sortie d'une autre commande.
<commande> | grep "MOTIF" # formuleps aux | grep nginx # exemplegrepfiltre ce qui arrive sur son entrée standard
Recherche multi-fichiers
Section intitulée « Recherche multi-fichiers »Chercher dans plusieurs fichiers à la fois.
grep "MOTIF" <fichier1> <fichier2> ... # formulegrep "server" *.conf # exemple*: joker shell pour cibler plusieurs fichiers
Les pièges à éviter
Section intitulée « Les pièges à éviter »Huit erreurs reviennent constamment avec grep. Pour chacune : la commande piégée, le symptôme, la cause et la correction.
Motif sans guillemets
Section intitulée « Motif sans guillemets »grep *.log fichier.txt # ❌ le shell interprète le * avant grepSymptôme : erreur ou résultats inattendus. Cause : le shell interprète les caractères spéciaux (*, ?, |) avant que grep ne les voie.
grep "*.log" fichier.txt # ✅ le motif est protégéOubli de -i pour la casse
Section intitulée « Oubli de -i pour la casse »grep "error" fichier.log # ❌ ne trouve pas "ERROR" ni "Error"Symptôme : des lignes manquent dans les résultats. Cause : par défaut, grep est sensible à la casse.
grep -i "error" fichier.log # ✅ casse ignoréegrep se trouve lui-même
Section intitulée « grep se trouve lui-même »ps aux | grep nginx # ❌ affiche aussi la ligne du processus "grep nginx"Symptôme : une ligne parasite contenant grep dans les résultats. Cause : le processus grep apparaît lui-même dans la liste de ps.
ps aux | grep nginx | grep -v grep # ✅ on exclut la ligne du grepRegex basique contre étendue
Section intitulée « Regex basique contre étendue »grep "ERROR|WARNING" fichier.log # ❌ cherche le texte littéral "ERROR|WARNING"Symptôme : aucun résultat. Cause : en regex basique, le | n'est pas l'alternance — il faut l'échapper ou utiliser -E.
grep -E "ERROR|WARNING" fichier.log # ✅ regex étendueCaractères spéciaux non échappés
Section intitulée « Caractères spéciaux non échappés »grep "prix: 10$" fichier.txt # ❌ le $ est interprété comme « fin de ligne »Symptôme : résultats inattendus. Cause : $ est un métacaractère de regex.
grep -F "prix: 10$" fichier.txt # ✅ -F traite le motif comme du texte littéral-c compte les lignes, pas les occurrences
Section intitulée « -c compte les lignes, pas les occurrences »grep -c "mot" fichier.txt # ❌ renvoie 2 même si "mot" apparaît 5 fois sur 2 lignesSymptôme : un compte inférieur au nombre réel d'occurrences. Cause : -c compte les lignes contenant le motif, pas le nombre total de correspondances.
grep -o "mot" fichier.txt | wc -l # ✅ compte les occurrences réellesFichiers binaires ignorés
Section intitulée « Fichiers binaires ignorés »grep "motif" fichier.bin # ❌ affiche "Binary file matches" au lieu du contenuSymptôme : un message au lieu du résultat. Cause : grep détecte un fichier binaire et n'en affiche pas le contenu.
grep -a "motif" fichier.bin # ✅ -a force le traitement comme du texteCorrespondance partielle indésirable
Section intitulée « Correspondance partielle indésirable »grep "port" config.conf # ❌ trouve aussi "import", "export", "support"Symptôme : trop de résultats non pertinents. Cause : grep cherche la sous-chaîne, pas le mot entier.
grep -w "port" config.conf # ✅ -w impose le mot entierTravaux pratiques
Section intitulée « Travaux pratiques »Rien ne remplace la pratique. Créez l'environnement de test ci-dessous, puis déroulez les douze étapes. À la fin, nettoyez avec rm -rf ~/grep-lab.
Préparer le terrain
Section intitulée « Préparer le terrain »Ce script crée quatre fichiers de test dans ~/grep-lab : un log applicatif, un fichier de configuration, du code source Python et une liste de contacts.
# Créer le labmkdir -p ~/grep-labcd ~/grep-lab
# Fichier de log applicatifcat > application.log << 'EOF'2025-01-15 08:00:01 INFO Application démarrée2025-01-15 08:00:02 DEBUG Connexion base de données établie2025-01-15 08:01:15 INFO Utilisateur alice connecté2025-01-15 08:02:30 WARNING Mémoire utilisée: 75%2025-01-15 08:03:45 ERROR Timeout lors de la requête API2025-01-15 08:03:46 DEBUG Retry 1/3 en cours...2025-01-15 08:03:48 ERROR Timeout lors de la requête API2025-01-15 08:03:49 DEBUG Retry 2/3 en cours...2025-01-15 08:03:51 INFO Requête réussie après retry2025-01-15 08:05:00 INFO Utilisateur bob connecté2025-01-15 08:10:00 WARNING Disque utilisé: 85%2025-01-15 08:15:00 ERROR Permission denied: /var/data/secret.txt2025-01-15 08:20:00 INFO Batch job terminé avec succèsEOF
# Fichier de configurationcat > config.conf << 'EOF'# Configuration serveurserver.host=localhostserver.port=8080server.ssl.enabled=true# Base de donnéesdatabase.host=db.example.comdatabase.port=5432database.name=productiondatabase.user=admin# Cachecache.enabled=truecache.ttl=3600# Logginglog.level=INFOlog.file=/var/log/app.logEOF
# Code source Pythoncat > app.py << 'EOF'#!/usr/bin/env python3"""Application principale"""import osimport logging
logging.basicConfig(level=logging.INFO)logger = logging.getLogger(__name__)
def connect_database(host, port): logger.info(f"Connexion à {host}:{port}") # TODO: implémenter la connexion réelle return True
def process_data(data): # FIXME: gérer les erreurs if not data: raise ValueError("Data is empty") return data.upper()
if __name__ == "__main__": connect_database("localhost", 5432) # TODO: ajouter la logique métierEOF
# Fichier avec adresses emailcat > contacts.txt << 'EOF'alice@example.com - Alice Martinbob.smith@company.org - Bob Smithcharlie@test.co.uk - Charlie Browninvalid-email - Non valideADMIN@EXAMPLE.COM - Administrateursupport@help-desk.net - Support techniqueEOF
echo "✅ Lab créé dans ~/grep-lab"ls -la ~/grep-labLes douze étapes
Section intitulée « Les douze étapes »-
Recherche simple. Trouvez toutes les lignes contenant
ERRORdansapplication.log.Fenêtre de terminal grep "ERROR" ~/grep-lab/application.loggrepaffiche toutes les lignes contenant le motif — ici, trois lignes. -
Ignorer la casse. Trouvez toutes les variantes de
error, quelle que soit la casse.Fenêtre de terminal grep -i "error" ~/grep-lab/application.log-irend la recherche insensible à la casse. -
Numéros de lignes. Affichez les erreurs avec leur numéro de ligne.
Fenêtre de terminal grep -n "ERROR" ~/grep-lab/application.log-npréfixe chaque résultat par son numéro de ligne dans le fichier. -
Inverser la recherche. Affichez toutes les lignes sauf celles contenant
DEBUG.Fenêtre de terminal grep -v "DEBUG" ~/grep-lab/application.log-vinverse le filtre : il garde les lignes qui ne correspondent pas. -
Compter les occurrences. Comptez le nombre de lignes contenant
INFO.Fenêtre de terminal grep -c "INFO" ~/grep-lab/application.log-crenvoie le nombre de lignes correspondantes, pas les lignes elles-mêmes. -
Contexte après. Affichez chaque
ERRORsuivi des 2 lignes qui suivent.Fenêtre de terminal grep -A 2 "ERROR" ~/grep-lab/application.log-A Najoute N lignes de contexte après chaque correspondance. Pour du contexte avant et après :grep -C 1 "ERROR" ~/grep-lab/application.log. -
Mot entier. Trouvez
INFOsans capturer un éventuelINFORMATION.Fenêtre de terminal grep -w "INFO" ~/grep-lab/application.log-wimpose une frontière de mot autour du motif. -
Expressions régulières basiques. Trouvez les lignes commençant par une date (
2025-).Fenêtre de terminal grep "^2025-" ~/grep-lab/application.log^représente le début de ligne en regex. -
Regex étendues avec alternance. Trouvez les lignes contenant
ERRORouWARNING.Fenêtre de terminal grep -E "ERROR|WARNING" ~/grep-lab/application.log-Eactive les regex étendues, où|signifie « ou ». -
Exclure les commentaires. Affichez les lignes de
config.confqui ne sont pas des commentaires.Fenêtre de terminal grep -v "^#" ~/grep-lab/config.conf^#cible les lignes commençant par#;-vles exclut. -
Pipeline avec grep. Listez les processus Python en cours.
Fenêtre de terminal ps aux | grep python | grep -v grepgrepfiltre la sortie deps; le secondgrep -v grepretire la ligne dugreplui-même. -
Recherche récursive. Trouvez tous les
TODOdans les fichiers du lab.Fenêtre de terminal grep -r "TODO" ~/grep-lab/-rparcourt récursivement tous les fichiers du dossier — lesTODOsont dansapp.py.
Exercices progressifs
Section intitulée « Exercices progressifs »Dix exercices pour valider votre maîtrise. Tous se traitent sur les fichiers du lab ~/grep-lab. Cherchez d'abord par vous-même, puis dépliez la solution pour vous corriger.
Niveau fondations
Section intitulée « Niveau fondations »Exercice 1 — Trouver les erreurs. Affichez toutes les lignes contenant ERROR dans application.log. Indice : syntaxe simple grep "motif" fichier.
Voir la solution
grep "ERROR" ~/grep-lab/application.loggrep affiche les lignes contenant le motif spécifié.
Exercice 2 — Ignorer la casse. Trouvez toutes les variantes de warning (warning, WARNING, Warning…). Indice : -i pour insensible à la casse.
Voir la solution
grep -i "warning" ~/grep-lab/application.log-i rend la recherche insensible à la casse.
Exercice 3 — Lignes sans DEBUG. Affichez toutes les lignes sauf celles contenant DEBUG. Indice : -v inverse la sélection.
Voir la solution
grep -v "DEBUG" ~/grep-lab/application.log-v affiche les lignes qui ne correspondent pas au motif.
Exercice 4 — Compter les erreurs. Comptez le nombre de lignes contenant ERROR. Indice : -c pour count.
Voir la solution
grep -c "ERROR" ~/grep-lab/application.log-c renvoie uniquement le nombre de lignes correspondantes.
Niveau composition
Section intitulée « Niveau composition »Exercice 5 — Contexte d'erreur. Affichez chaque ligne ERROR avec les 2 lignes suivantes. Indice : -A pour after.
Voir la solution
grep -A 2 "ERROR" ~/grep-lab/application.log-A N affiche N lignes après chaque correspondance.
Exercice 6 — Mot entier. Trouvez port dans config.conf sans capturer import ou export. Indice : -w pour word.
Voir la solution
grep -w "port" ~/grep-lab/config.conf-w garantit que le motif est un mot entier, pas une sous-chaîne.
Exercice 7 — Regex avec alternance. Trouvez les lignes contenant ERROR ou WARNING. Indice : -E pour les regex étendues, | pour le OU.
Voir la solution
grep -E "ERROR|WARNING" ~/grep-lab/application.log-E active les regex étendues, où | signifie « ou ».
Exercice 8 — Exclure les commentaires. Affichez les lignes de config.conf sans les commentaires (#). Indice : ^# cible le début de ligne, -v inverse.
Voir la solution
grep -v "^#" ~/grep-lab/config.conf^# cible les lignes commençant par # ; -v les exclut.
Exercice 9 — Recherche récursive. Trouvez tous les TODO dans les fichiers du lab. Indice : -r pour récursif.
Voir la solution
grep -r "TODO" ~/grep-lab/-r parcourt récursivement tous les sous-dossiers.
Niveau industrialisation
Section intitulée « Niveau industrialisation »Exercice 10 — Filtrer un processus. Listez les processus contenant ssh sans afficher la ligne du grep lui-même. Indice : un second grep -v grep.
Voir la solution
ps aux | grep ssh | grep -v grepLe second grep -v grep exclut la ligne du processus grep de la sortie.
Dépannage
Section intitulée « Dépannage »Quand grep ne renvoie pas ce qu'on attend, le problème vient presque toujours du motif (casse, regex, échappement). Voici comment diagnostiquer.
Méthodes de diagnostic
Section intitulée « Méthodes de diagnostic »# Tester le motif sur une ligne simpleecho "test ERROR test" | grep "ERROR"
# Afficher les caractères non imprimables du fichiercat -A fichier.log | head
# Valider une expression régulière isolémentecho "test123" | grep -E "[0-9]+"
# Voir combien de lignes correspondent avant de filtrergrep -c "MOTIF" fichier.logErreurs fréquentes
Section intitulée « Erreurs fréquentes »| Message d'erreur | Cause probable | Solution |
|---|---|---|
grep: <fichier>: No such file or directory | Fichier inexistant ou mauvais chemin | Vérifier avec ls, contrôler chemin relatif/absolu |
grep: Invalid regular expression | Syntaxe regex incorrecte (parenthèse/crochet non fermé) | Corriger la regex, ou -F pour une recherche littérale |
Binary file <fichier> matches | Le fichier est détecté comme binaire | Forcer le mode texte avec grep -a |
Aide-mémoire grep
Section intitulée « Aide-mémoire grep »Syntaxe et options
Section intitulée « Syntaxe et options »| Élément | Rôle | Exemple |
|---|---|---|
grep "motif" fichier | Recherche simple | grep "ERROR" log.txt |
-i | Ignorer la casse | grep -i "error" log.txt |
-v | Inverser (exclure) | grep -v "DEBUG" log.txt |
-n | Numéros de lignes | grep -n "ERROR" log.txt |
-c | Compter les lignes | grep -c "ERROR" log.txt |
-w | Mot entier | grep -w "port" config |
-l | Noms de fichiers uniquement | grep -rl "TODO" . |
-r | Recherche récursive | grep -r "TODO" src/ |
-o | Afficher uniquement le match | grep -o "IP: [0-9.]*" |
-A N | N lignes après | grep -A 3 "ERROR" |
-B N | N lignes avant | grep -B 2 "ERROR" |
-C N | N lignes de contexte | grep -C 2 "ERROR" |
-E | Regex étendues | grep -E "a|b" |
-F | Texte littéral (pas de regex) | grep -F "*.txt" |
Expressions régulières
Section intitulée « Expressions régulières »| Motif | Rôle | Exemple |
|---|---|---|
^motif | Début de ligne | grep "^#" config |
motif$ | Fin de ligne | grep "done$" log |
. | Un caractère quelconque | grep "err.r" |
* | Zéro occurrence ou plus du précédent | grep "ab*c" |
[abc] | Un caractère parmi la liste | grep "[aeiou]" |
[^abc] | Tout sauf ces caractères | grep "[^0-9]" |
a|b | a OU b (avec -E) | grep -E "cat|dog" |
\<mot\> | Mot entier (regex basique) | grep "\<port\>" |
Checklist de maîtrise
Section intitulée « Checklist de maîtrise »Vous maîtrisez grep lorsque vous pouvez cocher chacun de ces points :
- Je sais faire une recherche simple avec
grep - Je sais ignorer la casse avec
-i - Je sais inverser la recherche avec
-v - Je sais compter les lignes avec
-c - Je sais afficher le contexte avec
-A,-B,-C - Je sais chercher un mot entier avec
-w - Je sais utiliser les regex étendues avec
-E - Je sais faire une recherche récursive avec
-r - Je sais combiner
grepdans un pipeline
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.