← retour aux snippets

grep: recherche récursive fiable

Chercher dans un projet avec numéros de ligne, exclusions et couleurs.

bash recherche #grep#recherche#cli

objectif

Rechercher efficacement du texte dans un projet en évitant les fichiers binaires et les dossiers volumineux, avec un affichage lisible.

code minimal

# récursif, ignore les binaires, numéros de ligne, couleurs
grep -RIn --color=auto -E 'pattern' .

utilisation

# rechercher TODO ou FIXME, ignorer .git et node_modules, ignorer les fichiers minifiés
grep -RIn --color=auto -E 'TODO|FIXME' . \
  --exclude-dir='.git' --exclude-dir='node_modules' --exclude='*.min.js'

# recherche insensible à la casse et sur mots entiers
grep -RInw --color=auto -i 'token' .

# afficher 3 lignes de contexte autour des matches
grep -RIn --color=auto -C3 'pattern' .

# ne lister que les fichiers qui contiennent le motif (une ligne par fichier)
grep -RIl 'pattern' .

# sortie sûre pour enchaîner (NUL terminator) puis traitement
grep -RIlZ 'pattern' . | xargs -0 -n1 -P4 echo "contient le motif:" 

# protéger contre des motifs qui ressemblent à des options
grep -RIn --color=auto -E -- '^-{1,2}[a-z]+' .

variante(s) utile(s)

# accélérer sur gros dépôts (locale simple)
LC_ALL=C grep -RIn 'pattern' .

# respecter .gitignore avec ripgrep si disponible (plus rapide et pertinent)
rg -n --hidden --glob '!.git' 'pattern'

# chercher uniquement dans certaines extensions
grep -RIn --color=auto -E 'initApp' --include='*.{js,ts,tsx}' .

# compter les occurrences par fichier
grep -RIch 'pattern' . | sort -t: -k2,2nr

# afficher uniquement la partie correspondante (utile pour extraire)
grep -RhoE '[A-Fa-f0-9]{40}' .

notes

  • -R recurse, -I saute les binaires, -n numérote, -w mots entiers, -C N affiche le contexte.
  • préférez --exclude-dir/--exclude plutôt que des pipes supplémentaires pour de meilleures performances.
  • LC_ALL=C accélère la recherche ASCII pure; retirez-le pour des alphabets non ASCII.
  • rg (ripgrep) respecte .gitignore par défaut et est généralement plus rapide; gardez grep pour la portabilité.