Skip to Content
CLIRipgrep (rg)

⚡ 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éristiqueRipgrep (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-list

Expressions 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 config

Recherche 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 | uniq

Options 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

SituationOutil recommandéPourquoi
Recherche dans projet de code🏆 ripgrepVitesse, gitignore, types de fichiers
Recherche dans logs systĂšme🏆 grepDisponible partout, options avancĂ©es
Scripts shell portables🏆 grepGaranti installĂ©
Recherche interactive🏆 ripgrepCouleurs, sortie claire
Expressions rĂ©guliĂšres complexes🏆 ripgrepPCRE2 par dĂ©faut
Traitement de flux (pipes)🏆 grepIntĂ©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-case

IntĂ©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

UsageCommande
Recherche simplerg "pattern"
Insensible Ă  la casserg -i "pattern"
Mot entierrg -w "pattern"
Avec contexterg -C 3 "pattern"
Type de fichierrg -t js "pattern"
Uniquement les nomsrg -l "pattern"
Compterrg -c "pattern"
Ignorer gitignorerg -u "pattern"
Remplacementrg "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.