Aller au contenu

Commandes ripgrep (rg)

Outil de recherche récursive ultra-rapide qui combine la facilité d’utilisation d’ag avec la vitesse de grep. Respecte les règles .gitignore par défaut.

PlateformeCommande
macOS (Homebrew)brew install ripgrep
Ubuntu/Debiansudo apt install ripgrep
Arch Linuxsudo pacman -S ripgrep
Fedorasudo dnf install ripgrep
Windows (Scoop)scoop install ripgrep
Windows (Choco)choco install ripgrep
Cargo (Rust)cargo install ripgrep
Vérificationrg --version
CommandeDescription
rg "pattern"Recherche récursive dans le répertoire courant
rg "pattern" path/Recherche dans un répertoire spécifique
rg "pattern" file.txtRecherche dans un fichier spécifique
rg -i "pattern"Recherche insensible à la casse
rg -S "pattern"Casse intelligente (insensible si tout en minuscules)
rg -w "word"Correspondance de mots entiers uniquement
rg -c "pattern"Compter les correspondances par fichier
rg -l "pattern"Lister uniquement les fichiers avec des correspondances
rg --files-without-match "pattern"Lister les fichiers sans correspondance
rg -n "pattern"Afficher les numéros de ligne (par défaut)
rg -N "pattern"Masquer les numéros de ligne
rg --column "pattern"Afficher les numéros de colonne des correspondances
rg -F "literal.string"Recherche de chaîne littérale (sans regex)
CommandeDescription
rg "foo|bar"Correspondre foo OU bar
rg "^import"Lignes commençant par “import”
rg ";\s*$"Lignes se terminant par un point-virgule
rg "\d{3}-\d{4}"Correspondre un motif de numéro de téléphone
rg "\bfunction\b"Correspondance avec limites de mots
rg "fn\s+\w+"Correspondre les définitions de fonctions
rg -P "(?<=@)\w+"Regard arrière PCRE2 (extraire le domaine)
rg -P "\b\w{20,}\b"Mots de 20+ caractères
rg -U "struct \{[\s\S]*?\}"Correspondance multiligne
rg -e "pat1" -e "pat2"Motifs multiples (logique OU)
rg -f patterns.txtLire les motifs depuis un fichier
CommandeDescription
rg -A 3 "pattern"Afficher 3 lignes après la correspondance
rg -B 2 "pattern"Afficher 2 lignes avant la correspondance
rg -C 5 "pattern"Afficher 5 lignes de contexte (avant + après)
rg -o "pattern"Afficher uniquement le texte correspondant
rg --json "pattern"Sortie au format JSON
rg --vimgrep "pattern"Sortie au format compatible Vim
rg --color never "pattern"Désactiver la sortie en couleur
rg --color always "pattern" | less -RForcer la couleur pour le piping
rg --heading "pattern"Regrouper les résultats par fichier (par défaut dans le terminal)
rg --no-heading "pattern"Résultats sur une seule ligne sans regroupement
rg --trim "pattern"Supprimer les espaces blancs des résultats
rg -m 5 "pattern"Limiter à 5 correspondances par fichier
rg --max-count 1 "pattern"Première correspondance par fichier uniquement
rg --stats "pattern"Afficher les statistiques de recherche à la fin
rg --passthru "pattern"Afficher toutes les lignes en surlignant les correspondances
CommandeDescription
rg -t py "pattern"Rechercher uniquement dans les fichiers Python
rg -t js -t ts "pattern"Rechercher dans les fichiers JavaScript et TypeScript
rg -T html "pattern"Exclure les fichiers HTML
rg -g "*.md" "pattern"Filtre glob — fichiers markdown uniquement
rg -g "!*.min.js" "pattern"Exclusion glob — ignorer les JS minifiés
rg -g "src/**/*.ts" "pattern"Glob avec chemin de répertoire
rg -g "!test/" "pattern"Exclure le répertoire de tests
rg --type-listAfficher tous les types de fichiers connus
rg --type-add 'web:*.{html,css,js}'Définir un type de fichier personnalisé
CommandeDescription
rg --hidden "pattern"Inclure les fichiers/répertoires cachés
rg --no-ignore "pattern"Ne pas respecter les règles .gitignore
rg --no-ignore-vcs "pattern"Ignorer uniquement les fichiers d’exclusion VCS
rg -u "pattern"Sans restriction (—no-ignore)
rg -uu "pattern"Plus sans restriction (—no-ignore —hidden)
rg -uuu "pattern"Maximum sans restriction (+ fichiers binaires)
rg --max-depth 2 "pattern"Limiter la profondeur de répertoire
rg -L "pattern"Suivre les liens symboliques
rg --max-filesize 1M "pattern"Ignorer les fichiers de plus de 1 Mo
rg --sort path "pattern"Trier les résultats par chemin de fichier
rg --sortr modified "pattern"Trier par date de modification (plus récent d’abord)
rg --filesLister tous les fichiers que rg rechercherait
rg --files -t rustLister tous les fichiers Rust
CommandeDescription
rg "old" -r "new"Prévisualiser les remplacements (stdout uniquement)
rg "(\w+)@(\w+)" -r '$1 at $2'Remplacement avec groupes de capture regex
rg "TODO" -r "DONE" --passthruAfficher le fichier complet avec les remplacements
rg -l "oldFunc" | xargs sed -i 's/oldFunc/newFunc/g'Remplacer effectivement dans les fichiers (avec sed)
Fichier/VariableDescription
~/.ripgreprcFichier de configuration par défaut
RIPGREP_CONFIG_PATHChemin personnalisé du fichier de configuration
--no-configIgnorer le fichier de configuration
--smart-case
--line-number
--heading
--max-columns=200
--max-columns-preview
--glob=!node_modules/
--glob=!.git/
--glob=!dist/
--glob=!vendor/
--colors=match:fg:yellow
--colors=match:style:bold
--colors=path:fg:green
# Tous les TODOs avec contexte
rg "TODO|FIXME|HACK|XXX" -t py -C 2

# Compter les TODOs par fichier
rg -c "TODO" --sort path
# Prévisualiser les changements
rg "oldFunction" -r "newFunction" -t js

# Appliquer les changements (via sed)
rg -l "oldFunction" -t js | xargs sed -i 's/oldFunction/newFunction/g'
# Trouver les fichiers qui ne contiennent pas un motif
rg --files-without-match "Copyright" -t py

# Trouver les exports inutilisés
rg "export " -t ts -l | while read f; do
  rg -l "$(basename $f .ts)" -g "!$f" || echo "Unused: $f"
done
# Rechercher dans les journaux compressés
rg -z "ERROR" /var/log/*.gz

# Extraire les horodatages des erreurs
rg -o "\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.*ERROR.*" app.log

# Compter les erreurs par jour
rg -o "^\d{4}-\d{2}-\d{2}" --no-filename error.log | sort | uniq -c
# Sélection interactive de fichiers avec fzf
rg --files | fzf --preview 'rg --color=always "pattern" {}'

# Envoyer les résultats à vim
rg --vimgrep "pattern" | vim -q /dev/stdin

# Pipeline JSON avec jq
rg --json "pattern" | jq 'select(.type == "match") | .data.lines.text'
OutilVitesse.gitignoreUnicodeRegex
ripgrepLe plus rapide✅ Oui✅ Complet✅ Rust regex + PCRE2
grep -rLent❌ Non⚠️ Partiel✅ POSIX/étendu
ag (Silver Searcher)Rapide✅ Oui✅ Complet✅ PCRE
ackModéré❌ Non✅ Complet✅ Perl
  • Utilisez les filtres par type de fichier (-t, -T) plutôt que les globs quand c’est possible — c’est plus rapide et couvre toutes les extensions
  • Créez un .ripgreprc pour définir la casse intelligente, le regroupement et les exclusions de répertoires par défaut
  • Utilisez des fichiers .ignore à la racine des projets pour exclure node_modules, dist, build sans affecter git
  • Préférez -F pour les chaînes littérales contenant des métacaractères regex afin d’éviter l’échappement
  • Utilisez --stats pour comprendre les performances de recherche sur les grands projets
  • Combinez avec fzf ou xargs pour la sélection interactive et les opérations par lot
  • Utilisez --files d’abord pour vérifier quels fichiers seront recherchés avant de lancer la recherche
  • Utilisez le mode multiligne (-U) avec parcimonie — c’est plus lent ; préférez plusieurs recherches quand c’est possible
ProblèmeSolution
Résultats manquants dans un dépôt gitLes fichiers peuvent être dans .gitignore — utilisez rg -u ou --no-ignore
Fichier binaire ignoréUtilisez rg -uuu ou --text pour inclure les fichiers binaires
Regex ne correspond pasEssayez -P pour le moteur PCRE2, ou -F pour les chaînes littérales
Pas de résultat avec \bLe moteur par défaut peut ne pas le supporter — essayez rg -P "\bword\b"
Couleurs manquantes dans le pipeUtilisez --color always lors du piping vers less ou d’autres outils
Configuration non chargéeVérifiez RIPGREP_CONFIG_PATH ou utilisez --no-config pour déboguer
Liens symboliques non suivisAjoutez l’option -L ou --follow
Résultats trop bruyantsUtilisez les globs -g '!pattern' ou -t type pour réduire le périmètre
Recherche trop lenteUtilisez --max-filesize, réduisez la profondeur avec --max-depth, ou filtrez par type