⚡ Ripgrep (rg)
L’outil de recherche de texte moderne, ultra-rapide et intelligent. Remplace avantageusement grep pour la plupart des usages quotidiens.
Ripgrep (rg) est l’outil de recherche de texte par défaut pour de nombreux développeurs. Il combine la vitesse de Rust avec des fonctionnalités intelligentes comme le respect automatique du .gitignore. Une fois que tu l’auras essayé, tu ne reviendras plus en arrière !
Pourquoi choisir ripgrep ?
| Caractéristique | Ripgrep (rg) | Grep traditionnel |
|---|---|---|
| Vitesse | ⚡ Ultra-rapide (Rust) | 🐢 Plus lent (C) |
| Gitignore | ✅ Respecte automatiquement | ❌ Ignore tout |
| Recursivité | ✅ Par défaut | ❌ Option -r requise |
| Couleurs | ✅ Par défaut | ❌ Option —color requise |
| Regex | ✅ PCRE2 par défaut | ❌ Basique (option -E pour étendu) |
| Binaires | ✅ Ignorés automatiquement | ❌ Cherche dedans |
Installation rapide : sudo apt install ripgrep sur Ubuntu/Debian, brew install ripgrep sur macOS, ou cargo install ripgrep avec Rust.
Recherches de base
# Recherche simple (récursive par défaut)
rg "function"
# Recherche dans un dossier spécifique
rg "TODO" src/
# Recherche insensible à la casse
rg -i "error"
# Recherche avec mot entier (word boundaries)
rg -w "import"
# Recherche littérale (pas de regex)
rg -F "npm install --save"Options essentielles
Filtrage et affichage
# Afficher les numéros de ligne
rg -n "pattern"
# Afficher le contexte (lignes avant/après)
rg -C 3 "error" # 3 lignes avant et après
rg -A 5 "function" # 5 lignes après
rg -B 2 "class" # 2 lignes avant
# Uniquement les noms de fichiers
rg -l "TODO"
# Uniquement les parties qui matchent
rg -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b"
# Compter les occurrences par fichier
rg -c "console.log"Types de fichiers
# Rechercher uniquement dans certains types de fichiers
rg -t js "function" # fichiers JavaScript
rg -t py "import" # fichiers Python
rg -t rs "fn" # fichiers Rust
# Exclure certains types
rg -T md "link" # exclure les fichiers Markdown
# Liste des types disponibles
rg --type-listExpressions régulières avancées
Ripgrep utilise PCRE2 par défaut, beaucoup plus puissant que grep basique :
# Classes de caractères et quantificateurs
rg "\b\d{3}-\d{2}-\d{4}\b" # format SSN
rg "\b[A-Z]{2,}\b" # mots en majuscules (2+ lettres)
# Lookarounds
rg "error(?=.*critical)" # "error" suivi de "critical"
rg "(?<!test)user" # "user" non précédé de "test"
# Groupes nommés
rg "(?P<date>\d{4}-\d{2}-\d{2})"
# Alternatives complexes
rg "(GET|POST|PUT|DELETE)\s+/api/"Filtres intelligents
Respect du .gitignore
# Par défaut, rg respecte .gitignore, .ignore, etc.
rg "password" # ignore node_modules, .git, etc.
# Forcer la recherche dans tout (y compris gitignore)
rg -u "password"
# Ignorer les fichiers gitignore mais pas les binaires
rg --no-ignore-binary "password"Filtres personnalisés
# Ignorer des dossiers spécifiques
rg --glob='!node_modules/*' "pattern"
rg --glob='!*.min.js' "pattern"
# Rechercher uniquement dans certains dossiers
rg --glob='src/**/*' "component"
# Combinaison de filtres
rg --glob='*.js' --glob='!*.test.js' "function"Cas d’usage pratiques
Recherche dans les logs
# Rechercher des erreurs avec contexte
rg -C 5 "ERROR" logs/
# Compter les types d'erreurs
rg -c "ERROR|WARN|INFO" logs/ | sort -nr
# Rechercher dans les logs récents
rg --max-filesize 10M "error" logs/
# Recherche temporelle (logs avec timestamps)
rg "2024-01-1[0-9]" logs/Recherche de code
# Trouver toutes les fonctions non utilisées
rg "function\s+\w+" src/ | rg -v "export"
# Rechercher des TODOs et FIXMEs
rg -i "todo|fixme|hack|xxx" --type-add 'web:*.{js,ts,jsx,tsx,vue,svelte}' -t web
# Trouver les imports inutilisés
rg "^import.*from" src/ | head -20
# Rechercher des patterns de sécurité
rg -i "password.*=|secret.*=|api_key.*=" --type-add 'config:*.{env,config,yaml,yml,json}' -t configRecherche dans la documentation
# Rechercher dans la documentation locale
rg -t md "installation" docs/
# Trouver tous les liens cassés (format markdown)
rg "\[.*\]\(.*\)" --type md | rg -o "\(.*\)" | sort | uniqOptions avancées
Performance et limites
# Limiter le nombre de résultats
rg -m 10 "error" # max 10 résultats par fichier
# Limiter la taille des fichiers
rg --max-filesize 1M "pattern"
# Parallélisation (threads)
rg -j 4 "pattern" # utiliser 4 threads
# Mode verbeux pour debugging
rg --debug "pattern"Remplacement (substitution)
# Remplacement simple (dry run par défaut)
rg "oldFunction" --replace "newFunction"
# Remplacement avec confirmation
rg "TODO" --replace "FIXME" --passthru
# Remplacement avec regex groups
rg "v(\d+)\.(\d+)\.(\d+)" --replace "v$1.$2.$3"
# Appliquer les changements (attention !)
rg "oldPattern" --replace "newPattern" --no-heading --with-nul | xargs -0 perl -i -pe 's/oldPattern/newPattern/g'Sortie personnalisée
# Format JSON pour intégration
rg --json "pattern" | jq '.'
# Format grep-compatible
rg --grep "pattern"
# Pas de couleurs (pour scripts)
rg --no-color "pattern"
# Format avec séparateur personnalisé
rg --field-separator ' | ' "pattern"Comparaison avec grep
| Situation | Outil recommandé | Pourquoi |
|---|---|---|
| Recherche dans projet de code | 🏆 ripgrep | Vitesse, gitignore, types de fichiers |
| Recherche dans logs système | 🏆 grep | Disponible partout, options avancées |
| Scripts shell portables | 🏆 grep | Garanti installé |
| Recherche interactive | 🏆 ripgrep | Couleurs, sortie claire |
| Expressions régulières complexes | 🏆 ripgrep | PCRE2 par défaut |
| Traitement de flux (pipes) | 🏆 grep | Intégration Unix parfaite |
Grep reste utile pour les scripts qui doivent fonctionner sur n’importe quel système Unix, car il est garanti présent. Ripgrep doit être installé séparément.
Tips et astuces
Alias utiles
# Alias pour les usages courants
alias rgf='rg -F' # recherche littérale
alias rgi='rg -i' # insensible à la casse
alias rgw='rg -w' # mot entier
alias rgl='rg -l' # seulement les fichiers
# Recherche interactive avec fzf
alias rgfzf='rg --color always | fzf'Combinaisons puissantes
# Trouver des doublons
rg -o "\b\w+\b" | sort | uniq -c | sort -nr | head -10
# Rechercher et ouvrir dans éditeur
rg -l "pattern" | xargs $EDITOR
# Statistiques de code
rg -c "function|class|const|let|var" --type js | awk '{sum+=$2} END {print "Total:", sum}'Configuration persistante
Créer ~/.ripgreprc :
# ~/.ripgreprc
--type-add 'web:*.{js,ts,jsx,tsx,vue,svelte}'
--type-add 'config:*.{env,config,yaml,yml,json,ini}'
--type-add 'docs:*.{md,txt,rst}'
--hidden
--follow
--smart-caseIntégration avec d’autres outils
Avec Git
# Rechercher uniquement dans les fichiers suivis
rg "pattern" $(git ls-files)
# Rechercher dans les changements non commités
rg "pattern" $(git diff --name-only)
# Rechercher dans une branche spécifique
rg "pattern" $(git diff --name-only main..feature)Avec find
# Combiner avec find pour des filtres complexes
find . -name "*.js" -mtime -7 | xargs rg "TODO"
# Rechercher dans des fichiers de taille spécifique
find . -size +1M -type f | xargs rg "large_file_pattern"Rappels rapides
| Usage | Commande |
|---|---|
| Recherche simple | rg "pattern" |
| Insensible à la casse | rg -i "pattern" |
| Mot entier | rg -w "pattern" |
| Avec contexte | rg -C 3 "pattern" |
| Type de fichier | rg -t js "pattern" |
| Uniquement les noms | rg -l "pattern" |
| Compter | rg -c "pattern" |
| Ignorer gitignore | rg -u "pattern" |
| Remplacement | rg "old" --replace "new" |
Félicitations ! Tu maîtrises maintenant ripgrep, l’outil de recherche moderne. Pour approfondir, essaie rg —help ou visite le projet GitHub.