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.
Introduction à grep
Section intitulée « Introduction à grep »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 :
grep "ERREUR" journal.logPour chercher ce mot dans tous les fichiers d’un dossier :
grep "ERREUR" /var/log/*.logEt pour ignorer la casse :
grep -i "erreur" journal.loggrep 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.
Syntaxe de base
Section intitulée « Syntaxe de base »La commande grep suit une structure simple mais puissante, adaptée à des
recherches rapides ou complexes dans un ou plusieurs fichiers.
Structure générale
Section intitulée « Structure générale »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é…)
Exemple de base
Section intitulée « Exemple de base »Rechercher toutes les lignes contenant “Erreur” dans un fichier :
grep "Erreur" journal.logRechercher dans plusieurs fichiers
Section intitulée « Rechercher dans plusieurs fichiers »grep "root" /etc/passwd /etc/groupAffiche les lignes correspondantes avec le nom du fichier source.
Utiliser grep avec un pipe
Section intitulée « Utiliser grep avec un pipe »On peut filtrer les résultats d’une autre commande :
dmesg | grep "usb"Utiliser des jokers avec le shell
Section intitulée « Utiliser des jokers avec le shell »Pour chercher dans tous les fichiers .log :
grep "timeout" *.logAttention : les jokers sont gérés par le shell, pas par
greplui-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.
Recherche simple de motifs
Section intitulée « Recherche simple de motifs »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.
Rechercher un mot exact
Section intitulée « Rechercher un mot exact »grep "Erreur" fichier.logCela affiche toutes les lignes contenant le mot ou une partie de mot “Erreur”.
Rechercher un mot dans plusieurs fichiers
Section intitulée « Rechercher un mot dans plusieurs fichiers »grep "backup" *.confAffiche les lignes correspondantes avec le nom du fichier.
Ignorer la casse avec -i
Section intitulée « Ignorer la casse avec -i »grep -i "apache" /etc/*confCette 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) »grep -n "Listen" /etc/apache2/ports.confAffiche chaque ligne avec son numéro dans le fichier.
Rechercher des lignes vides
Section intitulée « Rechercher des lignes vides »grep "^$" fichier.txt^: début de ligne$: fin de ligne^$: ligne vide
Rechercher un mot entier (-w)
Section intitulée « Rechercher un mot entier (-w) »Pour éviter de capturer les mots partiels :
grep -w "user" fichier.txtCette 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.
Recherche avancée avec options
Section intitulée « Recherche avancée avec options »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.
Ignorer la casse : -i
Section intitulée « Ignorer la casse : -i »grep -i "server" config.txtTrouve “server”, “Server”, “SERVER”, etc.
Rechercher un mot entier : -w
Section intitulée « Rechercher un mot entier : -w »grep -w "port" fichier.confÉvite de capturer des mots partiels comme “airport” ou “import”.
Afficher le numéro de ligne : -n
Section intitulée « Afficher le numéro de ligne : -n »grep -n "Listen" ports.confAffiche les lignes trouvées avec leur numéro dans le fichier.
Afficher uniquement la correspondance : -o
Section intitulée « Afficher uniquement la correspondance : -o »grep -o "ERROR [0-9]*" log.txtAffiche seulement le texte correspondant au motif et non toute la ligne.
Compter le nombre de correspondances : -c
Section intitulée « Compter le nombre de correspondances : -c »grep -c "ERROR" log.txtRenvoie 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 »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 »grep -L "enabled" *.confMontre 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.
Recherche inversée et contextuelle
Section intitulée « Recherche inversée et contextuelle »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.
Exclure un motif avec -v
Section intitulée « Exclure un motif avec -v »Pour afficher toutes les lignes ne contenant pas un mot :
grep -v "DEBUG" application.logCette commande est parfaite pour filtrer les lignes inutiles ou parasites dans un log.
Afficher le contexte avec -A, -B et -C
Section intitulée « Afficher le contexte avec -A, -B et -C »-A [n] : lignes après le motif
Section intitulée « -A [n] : lignes après le motif »grep -A 2 "ERROR" journal.logAffiche 2 lignes après chaque ligne contenant “ERROR”.
-B [n] : lignes avant le motif
Section intitulée « -B [n] : lignes avant le motif »grep -B 3 "FAILURE" output.txtAffiche 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) »grep -C 1 "timeout" log.txtAffiche la ligne contenant le mot et une ligne de contexte avant et après.
Exemple combiné
Section intitulée « Exemple combiné »Afficher toutes les erreurs mais ignorer les lignes “benignes”, avec contexte :
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.
Recherche récursive et dans plusieurs fichiers
Section intitulée « Recherche récursive et dans plusieurs fichiers »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.
Recherche récursive avec -r ou -R
Section intitulée « Recherche récursive avec -r ou -R »Rechercher le mot “TODO” dans tous les fichiers d’un projet :
grep -r "TODO" .-rou-R: descente récursive dans les sous-dossiers.
Rechercher avec filtre sur l’extension
Section intitulée « Rechercher avec filtre sur l’extension »Pour ne rechercher que dans les fichiers .py :
grep "import" $(find . -name "*.py")Ou en combinant find et xargs :
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 »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 :
grep --binary-files=text "clé" fichier.dumpAvec 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.
Utilisation des expressions régulières
Section intitulée « Utilisation des expressions régulières »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.
Expressions régulières de base avec grep
Section intitulée « Expressions régulières de base avec grep »| Expression | Signification |
|---|---|
. | 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) |
Exemples :
Section intitulée « Exemples : »-
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.) :
grep -E "(erreur|warning)" fichier.logOu avec egrep, équivalent de grep -E :
egrep "(erreur|warning)" fichier.logUtiliser des quantificateurs avancés
Section intitulée « Utiliser des quantificateurs avancés »-
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 :
grep -P "\buser\d{2}\b" fichier.txtAttention :
-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.
Variantes de grep
Section intitulée « Variantes de grep »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 :
egrep "Erreur|Alerte" fichier.logPermet l’utilisation directe des opérateurs comme |, +, ?, {} sans les
échapper.
Remarque :
egrepest considéré comme obsolète, on recommandegrep -Eà la place.
fgrep – Grep sans expressions régulières
Section intitulée « fgrep – Grep sans expressions régulières »Équivalent à grep -F, il recherche des chaînes exactes sans interpréter
les métacaractères :
fgrep "1.2.3.4" journal.log- Plus rapide que
grepclassique pour des recherches très simples - Ne supporte aucune expression régulière
zgrep – Grep dans les fichiers compressés .gz
Section intitulée « zgrep – Grep dans les fichiers compressés .gz »Permet de rechercher dans les fichiers gzip sans décompression manuelle :
zgrep "ERREUR" archive.log.gz- Compatible avec les mêmes options que
grep - Très utile pour les logs archivés
pgrep – Recherche dans les processus
Section intitulée « pgrep – Recherche dans les processus »Contrairement aux autres, pgrep n’analyse pas les fichiers mais les
processus en cours :
pgrep sshAffiche les PID des processus contenant “ssh” dans leur nom.
Pour afficher les noms des processus :
pgrep -a nginxChaque 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.
Cas d’utilisation pratiques
Section intitulée « Cas d’utilisation pratiques »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 »grep -i "error" /var/log/syslogAffiche toutes les erreurs, quelle que soit la casse.
Pour voir les erreurs avec 3 lignes de contexte avant et après :
grep -C 3 "error" /var/log/syslog2. Rechercher des directives dans un fichier de configuration
Section intitulée « 2. Rechercher des directives dans un fichier de configuration »grep "^Listen" /etc/apache2/ports.confPermet 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 »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 »grep -c "connection lost" application.logAffiche combien de fois un événement s’est produit.
5. Extraire toutes les adresses IP d’un log
Section intitulée « 5. Extraire toutes les adresses IP d’un log »grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' serveur.logAvec -o pour afficher uniquement les correspondances.
6. Rechercher dans des fichiers compressés
Section intitulée « 6. Rechercher dans des fichiers compressés »zgrep "backup failed" archive.log.gzSans 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 »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.
Bonnes pratiques
Section intitulée « Bonnes pratiques »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 :
grep "motif" fichier_test.txtCela permet d’éviter des surprises liées à des correspondances inattendues ou des motifs mal formulés.
2. Utiliser des guillemets autour des motifs
Section intitulée « 2. Utiliser des guillemets autour des motifs »Surtout quand le motif contient des espaces, des caractères spéciaux, ou des jokers :
grep "adresse IP" fichier.log3. 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 :
grep -E "erreur|fail|critique" journal.logPlus 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 :
find . -name "*.log" | xargs grep "ERREUR"5. Filtrer les résultats avec -v ou -w
Section intitulée « 5. Filtrer les résultats avec -v ou -w »-
-vpour exclure des lignes :Fenêtre de terminal grep -v "DEBUG" fichier.log -
-wpour éviter les faux positifs sur des sous-mots :Fenêtre de terminal grep -w "root" /etc/passwd
6. Utiliser des fichiers de motifs avec -f
Section intitulée « 6. Utiliser des fichiers de motifs avec -f »Pour des recherches complexes ou multiples :
grep -f motifs.txt fichiers.txtLe fichier
motifs.txtcontient 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 :
grep --color=always "motif" fichierEn 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
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
📋 Récapitulatif de vos réponses
Vérifiez vos réponses avant de soumettre. Cliquez sur une question pour la modifier.
Détail des réponses
conclusion
Section intitulée « conclusion »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.
FAQ - Questions Fréquemment Posées
Section intitulée « FAQ - Questions Fréquemment Posées »La commande grep permet de rechercher des motifs textuels dans des fichiers ou des flux, et d'extraire les lignes qui correspondent, qu'il s'agisse d'un mot, d'une phrase ou d'une expression régulière.
Grep est utilisé pour rechercher des informations précises dans des fichiers logs, du code source ou des exports CSV, afin d'isoler rapidement une ligne ou un bloc contenant un mot-clé ou un motif spécifique.
La syntaxe est : grep [options] motif fichier. Le motif est le texte ou l'expression à rechercher, et les options permettent de modifier le comportement de grep.
Il suffit d'utiliser l'option -i, par exemple : grep -i "erreur" journal.log, pour trouver toutes les variantes, qu'elles soient en majuscules ou minuscules.
L'option -n permet d'afficher le numéro de ligne en plus de la ligne trouvée, ce qui facilite le repérage dans le fichier.
On utilise l'option -v pour exclure toutes les lignes contenant un motif. Par exemple : grep -v "DEBUG" log.txt.
L'option -r ou -R permet de faire une recherche récursive dans tous les sous-dossiers, par exemple : grep -r "TODO" .
Egrep est équivalent à grep -E et permet d'utiliser des expressions régulières étendues, ce qui rend certaines recherches plus simples à écrire.
Avec l'option -o, grep affiche uniquement la partie de la ligne qui correspond au motif recherché, au lieu de toute la ligne.
On utilise les options -A (après), -B (avant), ou -C (contexte complet) pour afficher les lignes environnantes, ce qui est très utile pour comprendre un message d'erreur.
L'option -w permet de ne rechercher que des mots entiers afin d'éviter des correspondances partielles, par exemple grep -w "root" /etc/passwd.
Oui, avec zgrep qui permet de rechercher directement dans des fichiers compressés au format .gz sans avoir à les décompresser d'abord.
Grep peut être utilisé dans des pipelines Unix, par exemple : dmesg | grep "usb", ce qui permet de filtrer les résultats d'autres commandes.
On utilise grep -E (ou egrep) pour des expressions régulières étendues, ou grep -P pour les regex Perl (si disponible), afin d'écrire des motifs avancés.
Il est conseillé de tester les motifs sur un petit fichier, d'utiliser des guillemets autour des motifs, de préférer grep -E pour plus de clarté, et de combiner grep avec find ou xargs pour des recherches complexes.