Maitriser la commande grep et ses variantes
Mise à jour :
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
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.log
Pour chercher ce mot dans tous les fichiers d’un dossier :
grep "ERREUR" /var/log/*.log
Et pour ignorer la casse :
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.
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
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
Rechercher toutes les lignes contenant “Erreur” dans un fichier :
grep "Erreur" journal.log
Rechercher dans plusieurs fichiers
grep "root" /etc/passwd /etc/group
Affiche les lignes correspondantes avec le nom du fichier source.
Utiliser grep
avec un pipe
On peut filtrer les résultats d’une autre commande :
dmesg | grep "usb"
Utiliser des jokers avec le shell
Pour chercher dans tous les fichiers .log
:
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.
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
grep "Erreur" fichier.log
Cela affiche toutes les lignes contenant le mot ou une partie de mot “Erreur”.
Rechercher un mot dans plusieurs fichiers
grep "backup" *.conf
Affiche les lignes correspondantes avec le nom du fichier.
Ignorer la casse avec -i
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
)
grep -n "Listen" /etc/apache2/ports.conf
Affiche chaque ligne avec son numéro dans le fichier.
Rechercher des lignes vides
grep "^$" fichier.txt
^
: début de ligne$
: fin de ligne^$
: ligne vide
Rechercher un mot entier (-w
)
Pour éviter de capturer les mots partiels :
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.
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
grep -i "server" config.txt
Trouve “server”, “Server”, “SERVER”, etc.
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
grep -n "Listen" ports.conf
Affiche les lignes trouvées avec leur numéro dans le fichier.
Afficher uniquement la correspondance : -o
grep -o "ERROR [0-9]*" log.txt
Affiche seulement le texte correspondant au motif, et non toute la ligne.
Compter le nombre de correspondances : -c
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
grep -l "root" /etc/*
Affiche uniquement le nom des fichiers contenant au moins une occurrence.
Afficher les fichiers ne contenant pas le motif : -L
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.
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
Pour afficher toutes les lignes ne contenant pas un mot :
grep -v "DEBUG" application.log
Cette commande est parfaite pour filtrer les lignes inutiles ou parasites dans un log.
Afficher le contexte avec -A
, -B
et -C
-A [n]
: lignes après le motif
grep -A 2 "ERROR" journal.log
Affiche 2 lignes après chaque ligne contenant “ERROR”.
-B [n]
: lignes avant le motif
grep -B 3 "FAILURE" output.txt
Affiche les 3 lignes précédant chaque occurrence.
-C [n]
: lignes avant et après (contexte complet)
grep -C 1 "timeout" log.txt
Affiche la ligne contenant le mot et une ligne de contexte avant et après.
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
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
Rechercher le mot “TODO” dans tous les fichiers d’un projet :
grep -r "TODO" .
-r
ou-R
: descente récursive dans les sous-dossiers.
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
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
Par défaut, grep
ignore les fichiers binaires. Pour forcer la recherche :
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.
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
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 :
-
Lignes commençant par
Erreur
:Terminal window grep "^Erreur" fichier.log -
Lignes se terminant par
.conf
:Terminal window grep "\.conf$" fichiers.txt -
Lignes contenant un chiffre :
Terminal window grep "[0-9]" fichier.txt
Expressions régulières étendues avec grep -E
ou egrep
Pour aller plus loin (groupes, alternances, etc.) :
grep -E "(erreur|warning)" fichier.log
Ou avec egrep
, équivalent de grep -E
:
egrep "(erreur|warning)" fichier.log
Utiliser des quantificateurs avancés
-
Mot contenant au moins trois chiffres :
Terminal window grep -E "[0-9]{3,}" fichier.txt -
Lignes contenant “Nom: [texte]” :
Terminal window grep -E "Nom: .+" fichier.txt
Expressions régulières Perl avec grep -P
(si supporté)
Pour des motifs plus complexes :
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.
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
Équivalent à grep -E
, il permet d’utiliser des expressions plus puissantes :
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 recommandegrep -E
à la place.
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
grep
classique pour des recherches très simples - Ne supporte aucune expression régulière
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
Contrairement aux autres, pgrep
n’analyse pas les fichiers mais les
processus en cours :
pgrep ssh
Affiche les PID des processus contenant “ssh” dans leur nom.
Pour afficher les noms des processus :
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.
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
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 :
grep -C 3 "error" /var/log/syslog
2. Rechercher des directives dans un fichier de configuration
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
grep -r "password=" ~/scripts/
Recherche récursive dans tous les scripts du dossier personnel.
4. Compter le nombre d’occurrences d’un événement
grep -c "connection lost" application.log
Affiche combien de fois un événement s’est produit.
5. Extraire toutes les adresses IP d’un log
grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' serveur.log
Avec -o
pour afficher uniquement les correspondances.
6. Rechercher dans des fichiers compressés
zgrep "backup failed" archive.log.gz
Sans devoir décompresser le fichier.
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
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
Avant de lancer une commande sur tout /var/log
ou un projet entier :
grep "motif" fichier_test.txt
Cela permet d’éviter des surprises liées à des correspondances inattendues ou des motifs mal formulés.
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.log
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.log
Plus lisible et plus propre que plusieurs grep
enchaînés.
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
-
-v
pour exclure des lignes :Terminal window grep -v "DEBUG" fichier.log -
-w
pour éviter les faux positifs sur des sous-mots :Terminal window grep -w "root" /etc/passwd
6. Utiliser des fichiers de motifs avec -f
Pour des recherches complexes ou multiples :
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
La plupart des systèmes activent cette option par défaut, sinon :
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é.
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.