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.