Maîtriser la commande grep sous Linux : la recherche dans des fichiers en ligne de commande
Découvrez comment utiliser la commande grep sous Linux pour retrouver une information sur de gros volumes de données. Plusieurs exemples pratiques seront présentés.
Sur un système Linux, on se retrouve très vite avec une quantité importante de fichiers textes : logs, fichiers de configuration, scripts, exports, etc. Pour retrouver une information précise au milieu de tout cela, la commande incontournable, c’est .
Que vous soyez admin système, développeur, DevOps ou simple utilisateur curieux, va vous servir au quotidien : analyse de journaux, recherche d’erreurs, extraction de données, vérification de configuration… Cet article a pour objectif de présenter la commande de façon progressive, avec des exemples concrets.
Sommaire
Qu’est-ce que la commande grep ?
La commande permet de rechercher un motif (texte simple ou expression régulière) dans un flux d’entrée. Ce flux d’entrée peut être un ou plusieurs fichiers, un dossier et son contenu ou encore la sortie d’une autre commande. Chaque ligne qui contient ce motif est affichée.

Le nom vient de l’éditeur : la commande (global regular expression print), qui faisait déjà ce travail de filtrage.
Syntaxe de base de grep
Comme vous avez pu l’apercevoir sur l’image ci-dessus, la forme générale est la suivante :
Si vous n’indiquez pas de fichier, lira sur l’entrée standard (nommée ). Souvent utilisé de cette manière pour “filtrer” la sortie d’une autre commande :
Nous allons à présent passer à des cas concrets d’utilisation de recherche de motif dans des fichiers via cette commande.
Si vous n’avez pas d’exemple sous la main, vous pouvez récupérer des journaux d’évènements ou fichiers volumineux sur ce dépôt GitHub : https://github.com/logpai/loghub/tree/master
Rechercher une chaîne simple
Commençons par rechercher toutes les lignes contenant le mot dans un fichier de log :
Toutes les lignes qui comportent ce motif seront affichées telles quelles :

Ignorer la casse
Par défaut, le motif indiqué est sensible à la casse. Cela signifie que rechercher est différent de rechercher . Nous pouvons ignorer la casse avec l’option suivante :
Cette commande trouvera donc , , , etc.
Rechercher dans plusieurs fichiers
Il est fréquent que l’on souhaite chercher dans tous les fichiers d’un dossier, ou dans plusieurs fichiers situés dans des chemins différents. Grep permet ce type de recherche, il suffit d’utiliser des wildcard ou de spécifier un à un les dossiers et fichiers cibles :
Lorsque l’on spécifie un dossier, par défaut va uniquement chercher dans le dossier en question, sans parcourir ses sous-dossiers. L’utilisation de l’option suivante permet d’effectuer une recherche récursive :
Lorsque l’on fait une recherche sur plusieurs fichiers, va par défaut préfixer les occurrences trouvées par le nom du fichier qui les contient :

grep et les expressions régulières
L’un des grands atouts de c’est sa capacité à utiliser des expressions régulières (regex) pour effectuer des recherches beaucoup plus précises que de simples mots. Auparavant, trois commandes étaient utilisées :
- grep : expressions régulières “simples”
- egrep : expressions régulières “étendues”
- fgrep : recherche de chaînes fixes (pas de regex)
Sur les distributions modernes, ces trois commandes ont été remplacées par des options dans la commande :
- (par défaut)
- à la place de : permet d’utiliser une syntaxe de regex plus riche.
- à la place de : désactive totalement les regex et traite le motif comme une chaîne brute.
L’idée de cet article n’est pas de vous faire un cours complet sur les expressions régulières, mais faisons un bref rappel.
Une expression régulière est une séquence de caractères qui définit un modèle de recherche. Elle est utilisée pour rechercher, vérifier ou manipuler du texte en fonction de critères précis. Par exemple, une regex peut permettre de trouver toutes les adresses e-mail dans un document, ou de vérifier si un mot de passe respecte certaines règles de sécurité.
Si je souhaite identifier toutes les adresses mail d’un document, je connais leur “modèle”, qui en version simplifiée sera . L’expression régulière suivante va me permettre d’identifier toutes les chaînes de caractères qui correspondent à ce modèle :
Comme vous le voyez, une regex peut être assez complexe et doit contenir des métacaractères pour indiquer le type, le nombre, l’emplacement et l’enchaînement des motifs recherchés. Pour aller plus loin, je vous recommande le site regex101.com, qui permet de tester et d’analyser des expressions régulières :

Voici un bref rappel des principaux métacaractères utilisés :
| Métacaractère | Signification | Exemple |
| N’importe quel caractère |
Regex : Exemple : Elle correspond à “a” suivi de n’importe quel caractère, puis “b” (ex. “aab”, “a1b”, “a_b”). |
|
| 0 ou plusieurs répétitions |
Regex : Exemple : Correspond à “ac”, “abc”, “abbc”, “abbbc”, etc. |
|
| 1 ou plusieurs répétitions |
Regex : Exemple : Correspond à “abc”, “abbc”, “abbbc”, mais pas “ac”. |
|
| 0 ou 1 répétition |
Regex : Exemple : Correspond à “color” ou “colour”. |
|
| Classe de caractère (exemple ou ) |
Regex : Exemple : Correspond à n’importe quel chiffre de 0 à 9. |
|
| Début de ligne |
Regex : Exemple : Correspond à une ligne qui commence par “Bonjour”. |
|
| Fin de ligne |
Regex : Exemple : Correspond à une ligne qui se termine par “monde”. |
|
| alternative |
Regex : Exemple : Correspond à “chat” ou “chien”. |
Voici quelques exemples d’utilisation des expressions régulières avec la commande (n’oubliez pas l’option ) :
Attention, si vous utilisez certains caractères spéciaux avec sans pour autant utiliser l’option des expressions régulières (), vous pourrez vous retrouver avec des comportements inattendus.
Les options les plus utiles de grep
Grep contient de nombreuses options, je vous propose ici les plus pratiques et utilisées.
Afficher le numéro de ligne : -n
Pour afficher aussi le numéro de la ligne trouvée, il faut ajouter l’option :
Voici un exemple de sortie :

Cela est souvent plus pratique pour ensuite ouvrir directement le fichier au bon endroit dans un éditeur.
Inverser la recherche : -v
L’option permet d’inverser la logique de la recherche : on affiche toutes les lignes qui ne correspondent pas au motif.
Cela permet notamment de dépolluer certains fichiers ou sorties.
Bien sûr, on peut tout à fait combiner ces différentes options (, , etc.) entre elles.
Compter les correspondances : -c
Si l’on veut simplement savoir combien de lignes correspondent, sans les afficher, on utilise :
Le résultat sera un nombre (par fichier, si plusieurs fichiers).
Afficher seulement la correspondance : -o
Par défaut, affiche la ligne entière. Avec , on affiche seulement la partie qui correspond au motif.
Voyez la différence :

Cela permet ensuite de chaîner avec d’autres commandes (, , etc.).
Afficher le contexte : -A, -B, -C
Lorsqu’on analyse un log, il est souvent intéressant de voir ce qui se passe autour de la ligne trouvée.
- : affiche N lignes après la correspondance (A pour After).
- : affiche N lignes avant la correspondance (B pour Before).
- : affiche N lignes avant et après la correspondance (C pour Context).
Voici quelques exemples :

Cela aide beaucoup à comprendre la situation (messages précédents, suite du traitement, etc.), par exemple dans les logs ou les fichiers de code.
Conclusion
La commande fait partie de la boite à outils de tout utilisateur Linux. Elle permet de :
- Rechercher rapidement une information dans un ou plusieurs fichiers.
- Exploiter des expressions régulières pour faire des recherches complexes.
- Filtrer la sortie d’autres commandes dans des pipes.
- Analyser efficacement des logs et des fichiers de configuration.
En connaissant les options vues dans cet article, et bien d’autres, vous gagnerez en efficacité dans vos recherches et votre utilisation des OS Linux. L’idéal pour progresser avec cet outil reste selon moi de partir de besoins concrets (logs à analyser, fichiers à nettoyer, données à extraire) et de tester différentes combinaisons d’options.
N’hésitez pas à partager vos retours et questions dans les commentaires ! Pour aller plus loin :