Skip to content

Instantly share code, notes, and snippets.

@enimiste
Created July 28, 2026 13:58
Show Gist options
  • Select an option

  • Save enimiste/61233df076809a5e518483ef4f35b3cf to your computer and use it in GitHub Desktop.

Select an option

Save enimiste/61233df076809a5e518483ef4f35b3cf to your computer and use it in GitHub Desktop.
Aide-mémoire `grep` — chercher du texte dans des fichiers

Aide-mémoire grep — chercher du texte dans des fichiers

Base

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 fichier

Précision de la recherche

grep -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 correspondre

Filtrer les fichiers

grep -r --include="*.log" "texte" .
grep -r --exclude="*.min.js" "texte" .
grep -r --exclude-dir={.git,node_modules,vendor} "texte" .

Contexte autour du match

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)

Options utiles en pratique

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

Combinaisons fréquentes

# 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

Récapitulatif des options

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

Alternatives plus rapides

rg "texte"                     # ripgrep : ignore .gitignore et les binaires
rg -i -g "*.py" "texte"        # insensible à la casse, filtré par glob
ag "texte"                     # the_silver_searcher

rg est nettement plus rapide que grep sur les gros dépôts.


Piège à retenir : -r ne suit pas les liens symboliques, -R oui.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment