ripgrep : grep ultra-rapide qui respecte votre .gitignore

grep -r "monPattern" . sur un projet Node.js descend dans node_modules et met 10 secondes à répondre. ripgrep fait la même recherche en quelques millisecondes, ignore automatiquement node_modules, respecte votre .gitignore, et affiche les résultats avec coloration et numéros de ligne.

Ce que fait ripgrep

ripgrep (rg) est un outil de recherche de texte dans des fichiers. Il combine la vitesse de l’algorithme de recherche de chaînes SIMD avec une gestion intelligente des fichiers à ignorer : .gitignore, .ignore, fichiers binaires, liens symboliques — tout est géré automatiquement.

rg "useState"
# Cherche dans tous les fichiers du répertoire courant
# Ignore node_modules, .git, dist, et tout ce qui est dans .gitignore

Installation

# macOS
brew install ripgrep

# Linux (Debian/Ubuntu)
sudo apt install ripgrep

# Cargo (Rust)
cargo install ripgrep

# Windows (Chocolatey)
choco install ripgrep

Utilisation de base

# Recherche simple
rg "TODO"

# Insensible à la casse
rg -i "todo"

# Avec expression régulière
rg "async\s+function\s+\w+"

# Dans un type de fichier spécifique
rg "import" --type js
rg "import" -t ts  # Raccourci

# Afficher seulement les fichiers correspondants
rg -l "TODO"

# Afficher le nombre de correspondances par fichier
rg -c "console.log"

Contexte autour des résultats

# 2 lignes avant et après chaque résultat
rg -C 2 "throw new Error"

# Seulement après
rg -A 3 "function fetchUser"

# Seulement avant
rg -B 2 "return null"

Chercher dans des types de fichiers

# Lister les types disponibles
rg --type-list

# Chercher seulement dans les fichiers Markdown
rg "tailscale" -t md

# Exclure un type
rg "TODO" --type-not js

# Définir un type personnalisé
rg "migration" --type-add 'sql:*.sql' -t sql

Remplacement (sans modifier les fichiers)

# Prévisualiser un remplacement
rg "oldFunction" --replace "newFunction"

# Avec sed pour modifier les fichiers
rg -l "oldFunction" | xargs sed -i 's/oldFunction/newFunction/g'

Options pratiques

# Chercher dans des fichiers ignorés (node_modules inclus)
rg "pattern" --no-ignore

# Chercher dans les fichiers cachés (.env, .htaccess)
rg "SECRET" --hidden

# Chercher des fichiers binaires aussi
rg "pattern" --text

# Sortie sans couleur (pour les pipes)
rg "pattern" --no-heading --color never

# Numéros de ligne désactivés
rg -N "pattern"

Intégration avec les éditeurs

La plupart des éditeurs modernes utilisent ripgrep en coulisses :

  • VS Code — “Search” utilise ripgrep nativement si installé
  • Neovim / Telescopegrep_string et live_grep s’appuient sur rg
  • Vim / fzf.vim:Rg pour la recherche dans le projet

+ Les points forts

  • Vitesse — significativement plus rapide que grep, ag (The Silver Searcher) et ack sur la plupart des benchmarks, grâce à l’algorithme SIMD et au parallélisme
  • Respect du .gitignore — comportement intelligent par défaut, pas besoin d’exclure manuellement node_modules ou dist
  • Affichage lisible — coloration, nom de fichier, numéro de ligne, groupement des résultats par fichier
  • Support Unicode natif — cherche correctement dans tous les encodages
  • Regex avancées — syntaxe Rust (similaire à PCRE2) avec lookahead, lookbehind, groupes nommés

- Les points faibles

  • Pas de remplacement en placerg ne modifie pas les fichiers. Pour remplacer, il faut combiner avec sed ou un autre outil (contrairement à perl -pi -e)
  • Regex différente de grep — la syntaxe regex de Rust diffère légèrement de POSIX grep. Certains patterns doivent être adaptés
  • Pas de recherche multi-lignes simple — la recherche sur plusieurs lignes nécessite l’option -U et une syntaxe spécifique
  • Moins universel que grep — grep est disponible sur toutes les machines Unix par défaut, rg doit être installé

En résumé

ripgrep est la commande qu’on installe une fois et qui remplace grep définitivement. Plus rapide, plus intelligente, plus lisible — il n’y a aucune raison de revenir en arrière. C’est aussi l’outil de recherche qu’utilisent VS Code et la plupart des éditeurs modernes sous le capot.


Voir aussi :

  • fzf — combiner ripgrep avec la sélection interactive
  • bat — afficher les résultats avec coloration syntaxique