⥠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.