# 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
1

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}
1

# 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
1

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
1

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'
1

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

# Alternatives

Dernière mise à jour: 7/19/2021, 9:51:25 PM