Commande Linux
grep
global regular expression print
"Cherche ce mot dans ce fichier." — Le Ctrl+F surpuissant du terminal. Cherche dans 10 000 fichiers aussi vite que dans un seul.
Recherche ⭐⭐ Intermédiaire 🔥 Très fréquente

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.
Utilisation de base
# 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

FlagSyntaxeCe que ça fait
-rgrep -rRécursif — cherche dans tous les sous-dossiers
-igrep -iInsensible à la casse (Erreur = erreur = ERREUR)
-ngrep -nAffiche le numéro de ligne
-lgrep -lAffiche seulement le nom des fichiers (pas les lignes)
-cgrep -cCompte le nombre d'occurrences
-vgrep -vInverse — affiche les lignes qui NE contiennent PAS le mot
-A ngrep -A 3Affiche aussi les 3 lignes APRÈS chaque résultat
-B ngrep -B 3Affiche aussi les 3 lignes AVANT chaque résultat
-C ngrep -C 3Affiche 3 lignes avant ET après (contexte)
-Egrep -EActive les expressions régulières étendues (regex)
--colorgrep --colorColore 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 — avec numéros de ligne
$ 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

Cas d'usage réels
# 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.

Pipes et combinaisons
# 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.

Regex essentiels
# ^ = 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.
← Précédent
find
Suivant →
chmod