C'est quoi, grep ?
grep cherche du texte dans des fichiers. Tu lui donnes un mot (ou un motif), il te dit dans quels fichiers et à quelle ligne ce mot apparaît. Simple, rapide, et incroyablement puissant.
💡 L'analogie : grep, c'est comme Ctrl+F dans Word — mais pour 10 000 fichiers à la fois, instantanément.
# Chercher "erreur" dans un fichier
$ grep "erreur" fichier.log
ligne 42: Une erreur critique s'est produite
ligne 87: Erreur de connexion à la base de données
# Chercher dans tous les fichiers d'un dossier
$ grep -r "erreur" ./logs/
logs/app.log:42: Une erreur critique s'est produite
logs/nginx.log:15: erreur 404 not found
Les flags essentiels
| Flag | Syntaxe | Ce que ça fait |
|---|---|---|
| -r | grep -r | Récursif — cherche dans tous les sous-dossiers |
| -i | grep -i | Insensible à la casse (Erreur = erreur = ERREUR) |
| -n | grep -n | Affiche le numéro de ligne |
| -l | grep -l | Affiche seulement le nom des fichiers (pas les lignes) |
| -c | grep -c | Compte le nombre d'occurrences |
| -v | grep -v | Inverse — affiche les lignes qui NE contiennent PAS le mot |
| -A n | grep -A 3 | Affiche aussi les 3 lignes APRÈS chaque résultat |
| -B n | grep -B 3 | Affiche aussi les 3 lignes AVANT chaque résultat |
| -C n | grep -C 3 | Affiche 3 lignes avant ET après (contexte) |
| -E | grep -E | Active les expressions régulières étendues (regex) |
| --color | grep --color | Colore les résultats (souvent actif par défaut) |
La combinaison magique : grep -rn
Si tu ne devais retenir qu'une combinaison, c'est grep -rn. Récursif + numéros de ligne. Tu sais exactement où tu es.
$ grep -rn "TODO" ./src/
src/app.js:42: // TODO: gérer les erreurs
src/utils.js:7: // TODO: optimiser cette fonction
src/config.js:156: // TODO: mettre en prod
# Avec contexte : voir 2 lignes avant/après
$ grep -rn -C 2 "TODO" ./src/
Exemples pratiques du quotidien
# Trouver toutes les erreurs dans les logs du jour
$ grep -i "error\|critical\|fatal" /var/log/syslog
# Chercher une IP suspecte dans les logs nginx
$ grep "192.168.1.42" /var/log/nginx/access.log
# Compter les requêtes 404
$ grep -c " 404 " /var/log/nginx/access.log
1337
# Trouver tous les fichiers qui utilisent une variable
$ grep -rl "DATABASE_URL" ./
.env
config/database.js
# Exclure les lignes commentées (commençant par #)
$ grep -v "^#" config.txt
# Combiner avec pipe : processus qui consomment du CPU
$ ps aux | grep "python"
# Chercher avec regex : lignes commençant par "ERROR"
$ grep -E "^ERROR" app.log
grep avec les pipes — le vrai pouvoir
grep devient exponentiel quand on le combine avec d'autres commandes via le pipe |. C'est là que la magie opère.
# Top 10 des IPs les plus actives dans les logs
$ grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' access.log | sort | uniq -c | sort -rn | head -10
# Chercher un process et tuer directement
$ ps aux | grep "node" | awk '{print $2}' | xargs kill
# Chercher dans l'historique des commandes
$ history | grep "docker"
Introduction aux regex avec grep
grep supporte les expressions régulières — des motifs de recherche puissants. Avec le flag -E, tu accèdes aux regex étendues.
# ^ = début de ligne
$ grep "^ERROR" app.log
# $ = fin de ligne
$ grep "\.js$" fichiers.txt
# . = n'importe quel caractère
$ grep "err.r" log.txt # matche "error", "errur", etc.
# | = OU (avec -E)
$ grep -E "error|warning|critical" app.log
# Chercher une adresse email
$ grep -E "[a-zA-Z0-9.]+@[a-zA-Z0-9.]+\.[a-z]+" contacts.txt
⚠ Performance
Sur des fichiers très volumineux (>1 Go), préfère
ag (Silver Searcher) ou ripgrep — ils sont 10 à 100x plus rapides que grep.💡 Alias utile
Ajoute dans ton
~/.bashrc : alias grep='grep --color=auto' pour toujours avoir la coloration des résultats.