grep -r "texte" . # récursif dans le dossier courant
grep -R "texte" /chemin # idem, mais suit les liens symboliques
grep -ri "texte" . # insensible à la casse
grep -rl "texte" . # affiche seulement les noms de fichiers
grep -rL "texte" . # l'inverse : fichiers qui NE contiennent PAS
grep -rn "texte" . # avec numéro de ligne
grep -rc "texte" . # nombre d'occurrences par fichiergrep -rw "cat" . # mot entier (pas "concatenate")
grep -rF "a.b*c" . # chaîne littérale, pas de regex
grep -rE "erreur|warning" . # regex étendue
grep -rv "texte" . # lignes qui ne matchent pas
grep -ro "user=[a-z]*" . # n'affiche que la partie qui matche
grep -rx "texte" . # la ligne entière doit correspondregrep -r --include="*.log" "texte" .
grep -r --exclude="*.min.js" "texte" .
grep -r --exclude-dir={.git,node_modules,vendor} "texte" .grep -rn -C 3 "texte" . # 3 lignes avant et après
grep -rn -A 5 "texte" . # 5 lignes après (After)
grep -rn -B 5 "texte" . # 5 lignes avant (Before)grep -rI "texte" . # ignore les fichiers binaires
grep -rs "texte" . # masque les erreurs (permission denied…)
grep -rn --color=auto "texte" .
grep -rm 1 "texte" . # s'arrête au 1er match par fichier
grep -rh "texte" . # masque les noms de fichiers# Le combo passe-partout
grep -rIn --exclude-dir=.git "TODO" .
# Chercher des fichiers sensibles
grep -riIl "motdepasse" . 2>/dev/null
# Chercher dans des fichiers sélectionnés par find
find . -name "*.conf" -mtime -7 -print0 | xargs -0 grep -n "port"
# Rechercher-remplacer dans tous les fichiers concernés
grep -rl "ancien" . | xargs sed -i 's/ancien/nouveau/g'
# Compter le total d'occurrences dans une arborescence
grep -roh "texte" . | wc -l| Option | Effet |
|---|---|
-r |
récursif (ne suit pas les liens symboliques) |
-R |
récursif, suit les liens symboliques |
-i |
insensible à la casse |
-l / -L |
fichiers qui contiennent / ne contiennent pas |
-n |
numéro de ligne |
-c |
compte les lignes qui matchent |
-w / -x |
mot entier / ligne entière |
-F / -E |
littéral / regex étendue |
-v |
inverse la sélection |
-o |
n'affiche que la partie qui matche |
-I |
ignore les binaires |
-s |
silencieux sur les erreurs |
-h |
masque les noms de fichiers |
-A / -B / -C |
contexte après / avant / autour |
rg "texte" # ripgrep : ignore .gitignore et les binaires
rg -i -g "*.py" "texte" # insensible à la casse, filtré par glob
ag "texte" # the_silver_searcherrg est nettement plus rapide que grep sur les gros dépôts.
Piège à retenir : -r ne suit pas les liens symboliques, -R oui.