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.
| Plateforme | Commande |
|---|
| macOS (Homebrew) | brew install ripgrep |
| Ubuntu/Debian | sudo apt install ripgrep |
| Arch Linux | sudo pacman -S ripgrep |
| Fedora | sudo dnf install ripgrep |
| Windows (Scoop) | scoop install ripgrep |
| Windows (Choco) | choco install ripgrep |
| Cargo (Rust) | cargo install ripgrep |
| Vérification | rg --version |
| Commande | Description |
|---|
rg "pattern" | Recherche récursive dans le répertoire courant |
rg "pattern" path/ | Recherche dans un répertoire spécifique |
rg "pattern" file.txt | Recherche 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) |
| Commande | Description |
|---|
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.txt | Lire les motifs depuis un fichier |
| Commande | Description |
|---|
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 -R | Forcer 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 |
| Commande | Description |
|---|
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-list | Afficher tous les types de fichiers connus |
rg --type-add 'web:*.{html,css,js}' | Définir un type de fichier personnalisé |
| Commande | Description |
|---|
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 --files | Lister tous les fichiers que rg rechercherait |
rg --files -t rust | Lister tous les fichiers Rust |
| Commande | Description |
|---|
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" --passthru | Afficher le fichier complet avec les remplacements |
rg -l "oldFunc" | xargs sed -i 's/oldFunc/newFunc/g' | Remplacer effectivement dans les fichiers (avec sed) |
| Fichier/Variable | Description |
|---|
~/.ripgreprc | Fichier de configuration par défaut |
RIPGREP_CONFIG_PATH | Chemin personnalisé du fichier de configuration |
--no-config | Ignorer 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'
| Outil | Vitesse | .gitignore | Unicode | Regex |
|---|
| ripgrep | Le plus rapide | ✅ Oui | ✅ Complet | ✅ Rust regex + PCRE2 |
| grep -r | Lent | ❌ Non | ⚠️ Partiel | ✅ POSIX/étendu |
| ag (Silver Searcher) | Rapide | ✅ Oui | ✅ Complet | ✅ PCRE |
| ack | Modé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ème | Solution |
|---|
| Résultats manquants dans un dépôt git | Les 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 pas | Essayez -P pour le moteur PCRE2, ou -F pour les chaînes littérales |
Pas de résultat avec \b | Le moteur par défaut peut ne pas le supporter — essayez rg -P "\bword\b" |
| Couleurs manquantes dans le pipe | Utilisez --color always lors du piping vers less ou d’autres outils |
| Configuration non chargée | Vérifiez RIPGREP_CONFIG_PATH ou utilisez --no-config pour déboguer |
| Liens symboliques non suivis | Ajoutez l’option -L ou --follow |
| Résultats trop bruyants | Utilisez les globs -g '!pattern' ou -t type pour réduire le périmètre |
| Recherche trop lente | Utilisez --max-filesize, réduisez la profondeur avec --max-depth, ou filtrez par type |