Imaginez que vous avez un fichier de 10 000 lignes et que vous cherchez toutes les erreurs. Vous n’allez pas faire défiler à la main. C’est exactement pour ça que grep existe.
grep lit un fichier (ou plusieurs), et ne vous montre que les lignes qui contiennent ce que vous cherchez. Simple. Rapide. Puissant.
La forme de base
grep "ce que je cherche" mon_fichier.txt
Rien de plus. Vous tapez ça, vous obtenez toutes les lignes qui contiennent votre motif.
Exemple concret : vous avez un fichier de logs et vous voulez voir les erreurs.
grep "ERREUR" app.log
[09:12] ERREUR Timeout sur la base de données
[09:13] ERREUR Impossible de se connecter à PostgreSQL
[11:30] ERREUR Clé API invalide pour le service mail
Seulement les erreurs, rien d’autre. Les centaines de lignes INFO ont disparu.
Les options qui changent tout
Les options se placent entre grep et le motif. Elles se combinent librement : -in c’est la même chose que -i -n.
-i — se fiche des majuscules
grep -i "python" langages.txt
Sans -i, Python et python seraient deux choses différentes. Avec -i, grep les traite pareil. Pratique quand vous ne savez pas comment le texte est écrit.
Python - langage interprété, très populaire en data science
python2 - ancienne version, dépréciée depuis 2020
-n — savoir où c’est
grep -n "def" script.py
Ajoute le numéro de ligne devant chaque résultat. Indispensable pour ensuite aller directement à la bonne ligne dans votre éditeur.
2:def somme_pairs(liste):
7:def factorielle(n):
-v — l’inverse
grep -v "INFO" app.log
Affiche tout sauf ce qui correspond. Dans un fichier de logs, c’est parfait pour éliminer le bruit et ne garder que les lignes importantes.
[09:12] ERREUR Timeout sur la base de données
[10:02] WARN Mémoire disponible inférieure à 20%
[11:30] ERREUR Clé API invalide
-c — juste un chiffre
grep -c "import" main.py
Ne vous montre pas les lignes — juste leur nombre. Utile pour des stats rapides ou vérifier si un motif est présent.
14
-r — dans tout un dossier
grep -r "password" ./config
Cherche récursivement dans tous les fichiers du dossier. Le résultat inclut le nom du fichier avant chaque ligne trouvée.
config/db.ini:password = secret123
config/mail.ini:smtp_password = xxxxxxxx
Conseil : combinez presque toujours
-ravec-npour avoir les numéros de ligne :grep -rn "motif" .
-l — juste les noms de fichiers
grep -rl "TODO" ./src
Quand vous voulez savoir dans quels fichiers se trouve un motif, pas les lignes elles-mêmes. Très utile dans un gros projet.
src/auth.py
src/utils.py
src/models/user.py
-A, -B, -C — voir le contexte
Une erreur sans contexte, ça ne sert à rien. Ces options affichent des lignes autour du résultat.
grep -A 3 "Exception" app.log # 3 lignes APRÈS
grep -B 2 "Exception" app.log # 2 lignes AVANT
grep -C 2 "Exception" app.log # 2 lignes des deux côtés
Processing request id=9821
--
NullPointerException: object is null
at line 42 in handler.py
Rolling back transaction...
Sending error response to client
Combiner les options
C’est là que grep devient vraiment efficace. Quelques combos du quotidien :
# Chercher "host" sans se soucier de la casse, avec numéros de ligne
grep -in "host" config.ini
# Tous les fichiers d'un projet contenant "error" (insensible)
grep -ri "error" .
# Les fichiers qui contiennent une TODO, avec leur numéro de ligne
grep -rn "TODO" ./src
# Tout sauf les commentaires dans un fichier Python
grep -v "^#" script.py
Le pipe — grep avec les autres commandes
grep devient encore plus fort quand il reçoit la sortie d’une autre commande.
# Quels processus Python tournent en ce moment ?
ps aux | grep "python"
# Chercher dans l'historique de vos commandes
history | grep "docker"
# Lister les fichiers .py d'un dossier
ls -la | grep ".py"
Le | envoie la sortie de la commande de gauche comme entrée à grep. C’est un des fondamentaux du terminal.
Les expressions régulières
grep supporte les regex, ce qui permet des recherches bien plus précises.
Les ancres ^ et $
^ signifie “début de ligne”, $ signifie “fin de ligne”.
# Lignes qui commencent par un commentaire Python
grep "^#" script.py
# Lignes qui finissent par un point-virgule
grep ";$" code.js
# Lignes vides
grep "^$" fichier.txt
Les classes [ ]
# Lignes contenant un chiffre
grep "[0-9]" fichier.txt
# Lignes contenant une voyelle minuscule
grep "[aeiou]" fichier.txt
Le ou logique avec -E
L’option -E active les regex étendues, ce qui débloque le | (ou), +, ?, les groupes ( ).
# Erreurs ET avertissements en une seule commande
grep -E "ERREUR|WARN" app.log
# http ou https
grep -E "https?" urls.txt
# Lignes contenant "error" ou "exception" (insensible)
grep -iE "error|exception" app.log
Petite mise en pratique
Voici quelques exercices pour ancrer tout ça. La réponse est juste en dessous de chaque question — essayez d’abord sans regarder.
Exercice 1 — Débutant
Vous avez un fichier access.log. Vous voulez voir toutes les lignes contenant 404.
Voir la réponse
grep "404" access.log
Exercice 2 — Débutant
Même fichier. Cette fois vous voulez les lignes 404, avec leur numéro de ligne.
Voir la réponse
grep -n "404" access.log
Exercice 3 — Intermédiaire
Vous voulez compter combien de requêtes ont abouti à une erreur 500 dans ce fichier.
Voir la réponse
grep -c "500" access.log
Exercice 4 — Intermédiaire
Dans un projet, vous cherchez tous les fichiers qui contiennent le mot deprecated, sans tenir compte de la casse.
Voir la réponse
grep -ril "deprecated" .
-r pour récursif, -i pour la casse, -l pour n’afficher que les noms de fichiers.
Exercice 5 — Avancé
Vous voulez voir toutes les lignes d’un fichier server.log qui contiennent ERROR ou CRITICAL, avec 2 lignes de contexte autour.
Voir la réponse
grep -E -C 2 "ERROR|CRITICAL" server.log
Cheatsheet
| Commande | Ce qu’elle fait |
|---|---|
grep "motif" fichier |
Recherche de base |
grep -i "motif" fichier |
Insensible à la casse |
grep -n "motif" fichier |
Avec numéros de ligne |
grep -v "motif" fichier |
Inverser (exclure) |
grep -c "motif" fichier |
Compter les lignes |
grep -r "motif" dossier/ |
Récursif dans un dossier |
grep -l "motif" *.txt |
Noms de fichiers uniquement |
grep -w "mot" fichier |
Mot entier (pas “moteur”) |
grep -A n "motif" fichier |
n lignes après |
grep -B n "motif" fichier |
n lignes avant |
grep -C n "motif" fichier |
n lignes des deux côtés |
grep -E "a\|b" fichier |
Regex étendue (ou logique) |
cmd \| grep "motif" |
Filtrer la sortie d’une commande |
Pour aller plus loin
grep -o— n’affiche que la partie du texte qui correspond, pas la ligne entière. Pratique pour extraire des IPs, des emails, des nombres.grep -m n— s’arrête après n résultats. Utile sur de très gros fichiers.grep --color— colorie les correspondances dans le terminal. Souvent activé par défaut.egrepetfgrep— des variantes de grep :egrepéquivaut àgrep -E,fgrepcherche des chaînes fixes (sans regex).ripgrep(rg) — un grep beaucoup plus rapide, idéal pour chercher dans de gros projets. La syntaxe est quasi identique.
La documentation complète : man grep dans votre terminal.
Commentaires
Aucun commentaire pour l'instant. Soyez le premier !
Laisser un commentaire