# 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
.gitignore
ni 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
,.ignore
et.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
.