# ripgrep
ripgrep (opens new window) est un utilitaire relativement équivalent à grep
pensé plus spécifiquement pour la recherche dans les dépôts de code:
- recherche récursive dans les sous-dossiers,
- ne recherche pas dans les fichiers cachés, les fichiers spécifiés par
.gitignoreni les fichiers binaires par défaut, - recherche par langages,
- support unicode par défaut,
- rapide
# Usage
ripgrep est très simple d'utilisation, par exemple:
> rg anything
va rechercher anything récursivement dans l'ensemble des fichiers du dossier courant et de ses sous-dossiers, à l'exception:
- des fichiers spécifiés dans les fichiers
.gitignore,.ignoreet.rgignore - des dossiers et fichiers cachés (tout ce qui commence par un point)
- des fichiers binaires.
Par défaut la chaine de recherche est interprétée comme une expression régulière par ripgrep:
> rg [ripge]{7}
# Cibler les fichiers
Il existe plusieurs mécanismes pour cibler les fichiers sur lesquels la recherche est appliquée.
# Par langage
ripgrep propose un mécanisme pour cibler les fichiers par langage. Par exemple, pour un projet en Java, la commande:
> rg anything -tjava
recherchera anything dans tous les fichiers de type Java, soit les fichiers dont l'extension est .java, .jsp, .jspx ou .properties.
A l'inverse, si l'on souhaite spécifiquement rechercher dans tous les fichiers qui ne sont pas du type Java:
> rg anything -Tjava
TIP
La commande rg --type-list permet de connaitre la liste des types préconfigurés ainsi que les extensions associées.
# Par glob
Il est également possible de ciblé via un glob avec l'option -g.
Les globs sont alors interprétés comme ceux présents dans les fichiers .gitignore. La commande
> rg anything -g '*.md' -g '!*rg.md'
recherchera anything dans les fichiers markdown (.md)
à l'exception des fichiers dont le nom se termine par rg.md.
WARNING
Penser à mettre son glob entre simple quote pour éviter que '*' soit interprété par le shell.
# Fichiers ignorés, cachés et binaires
Par défaut, les fichiers spécifiés dans les .gitignore, les fichiers cachés et les fichiers binairess
ne font pas partis de la recherche. Il est possible de désactiver ce comportement avec les options:
| Option | Comportement |
|---|---|
| --no-ignore | recherche dans les fichiers spécifiés par .gitignore |
| --hidden | recherche dans les dossiers et fichiers cachés |
| --binary | recherche dans les fichiers binaires |
Pour plus de simplicité, ripgrep fournit l'option -u pour augmenter progressivement la portée de la recherche:
> rg anything
> rg -u anything # rg --no-ignore anything
> rg -uu anything # rg --no-ignore --hidden anything
> rg -uuu anything # rg --no-ignore --hidden --binary anything
2
3
4
# Gestion de la casse
Par défaut ripgrep respecte la casse du pattern de recherche, mais propose des options pour changer ce comportement:
| Option | Comportement |
|---|---|
| -s | sensible à la casse (défaut) |
| -i | insensible à la casse |
| -S | insensible à la casse si le pattern est en minuscule, sensible à la casse sinon |
# Afficher le context
ripgrep affiche les lignes qui contiennent le pattern recherché. Comme pour grep,
il est possible d'afficher les lignes qui les précèdent ou qui les suivent.
Les options sont les mêmes que pour grep -B (before) pour le nombre de ligne qui précèdent,
-A (after) pour le nombre de lignes qui suivent et -C (context) pour le nombre de lignes
qui précèdent et qui suivent.
> rg -B 1 anything
> rg -A 3 anything
> rg -C 2 anything
2
3
# Autres options
| Option | Comportement |
|---|---|
| -v | recherche inversée: tous ce qui ne correspond pas au pattern donné |
| -U | recherche multiligne, permet d'utiliser \n dans le pattern |
| -z | recherche dans les fichiers compressés (zip, bzip2, xz, LZ4, LZMA, Brotli et Zstd) |
| -w | recherche par mot |
Il s'agit d'une présentation rapide, ripgrep dispose de bien d'autres options pour faciliter la recherche.
Comme toujours, man rg.