rga, appelé ripgrep-all, est un excellent outil qui vous permet de rechercher un modèle de texte dans presque tous les fichiers. Alors que la commande OG grep est limitée aux fichiers en texte brut, rga peut rechercher du texte dans un large éventail de types de fichiers tels que PDF, livres électroniques, documents Word, zip, tar et même des sous-titres intégrés.

C’est quoi exactement?

La grep La commande est utilisée pour rechercher des modèles textuels dans les fichiers. Cela signifie en fait gglobal concernantgex pattern. Vous pouvez non seulement rechercher des mots simples, mais également spécifier que le mot doit être le premier mot d’une ligne, à la fin d’une ligne, ou qu’un mot spécifique doit le précéder. C’est pourquoi grep est si puissant, car il utilise des regex (expressions régulières).

Il y a aussi une limitation sur grep, en quelque sorte. Vous ne pouvez utiliser grep que pour rechercher des modèles dans un fichier en texte brut. Cela signifie que vous ne pouvez pas rechercher de modèles dans un document PDF, dans une archive tar/zip compressée, ni dans une base de données comme SQLite.

Imaginez maintenant avoir la puissante recherche offerte par grep, mais aussi pour d’autres types de fichiers. C’est rga, ou ripgrep-all, peu importe comment vous l’appelez.

C’est ripgrep, mais avec des fonctionnalités supplémentaires. Nous avons également un tutoriel couvrant ripgrepau cas où cela vous intéresserait.

Comment installer ripgrep-all

Les utilisateurs d’Arch Linux peuvent facilement installer ripgrep-all à l’aide de la commande suivante :

sudo pacman -S ripgrep-all

Le gestionnaire de packages Nix contient ripgrep-all et pour cela, utilisez la commande suivante :

nix-env -iA nixpkgs.ripgrep-all

Les utilisateurs de Mac peuvent utiliser le gestionnaire de paquets homebrew comme suit :

brew install ripgrep-all

Utilisateurs Debian/Ubuntu

Pour le moment, ripgrep-all n’est disponible ni dans les référentiels propriétaires de Debian ni dans les référentiels d’Ubuntu. Ne vous inquiétez pas, cela ne signifie pas qu’il s’agit d’unobtainium.

Sur tout autre système d’exploitation basé sur Debian (Ubuntu et ses dérivés également), installez d’abord les dépendances nécessaires :

sudo apt-get install ripgrep pandoc poppler-utils ffmpeg

Une fois ceux-ci installés, visitez cette page qui contient le programme d’installation. Trouvez le fichier qui contient le x86_64-unknown-linux-musl suffixe. Téléchargez et extrayez-le.

Cette archive tar contient deux fichiers exécutables binaires nécessaires. Elles sont rga et rga-preproc.

Copiez-les dans le ~/.local/bin. Dans la plupart des cas, ce répertoire existera, mais si vous ne l’avez pas, créez-le à l’aide de la commande suivante :

mkdir -p $HOME/.local/bin

Enfin, ajoutez les lignes suivantes à votre ~/.bashrc:

if ! [[ $PATH =~ "$HOME/.local/bin" ]]; then
  PATH="$HOME/.local/bin:$PATH"
fi

Maintenant, fermez et rouvrez le terminal pour apporter les modifications apportées dans ~/.bashrc efficace. Avec cela, ripgrep-all est installé.

Utilisation de ripgrep-all

ripgrep-all est le nom du projet, pas le nom de la commande, le nom de la commande est rga.

L’utilitaire rga prend en charge les extensions de fichier suivantes :

  • médias: .mkv, .mp4, .avi
  • documents : .epub, .odt, .docx, .fb2, .ipynb, .pdf
  • archives compressées : .zip, .tar, .tgz, .tbz, .tbz2, .gz, .bz2, .xz, .zst
  • bases de données : .db, .db3, .sqlite, .sqlite3
  • images (OCR): .jpg, .png

Tu pourrais être familier avec grep, mais regardons tout de même quelques exemples. Cette fois, avec rga au lieu de grep.

Avant de poursuivre, veuillez consulter la hiérarchie des répertoires ci-dessous :

.
├── my_demo_db.sqlite3
├── my_demo_document.odt
└── TLCL-19.01.pdf.zip

Recherche insensible à la casse et sensible à la casse

Le pattern matching le plus simple consiste à rechercher un mot dans un fichier. Essayons cela. Je vais utiliser la commande rga pour effectuer une recherche sensible à la casse pour les mots red hat enterprise linux pour tous les fichiers du répertoire courant.

Alors que grep a la sensibilité à la casse activée par défaut, avec rga, le -s doit être utilisé.

rga -s 'red hat enterprise linux'

Comme vous pouvez le voir, avec une recherche sensible à la casse, je n’ai obtenu le résultat que d’un fichier de base de données sqlite3. Maintenant, essayons une recherche insensible à la casse en utilisant le -i et voir quels résultats nous obtenons.

Recherche insensible à la casse avec rga
rga -i 'red hat enterprise linux'

Ah, cette fois, nous avons aussi eu un match du La ligne de commande Linux livre de William Shotts.

Correspondance inverse

Avec grep, et par extension, avec ripgrep-all, vous pouvez faire une correspondance inverse. Ce qui signifie, Show only lines that do NOT have this pattern.

L’option pour cela est -v et qui doit être présent immédiatement avant le motif.

Correspondance inversée utilisant rga
rga -v linux *.sqlite3 AND rga linux *sqlite3

Hé! Tenir. Ce n’est pas Linux !

Cette fois, je n’ai sélectionné que le fichier de base de données, car tous les autres fichiers contiennent de nombreuses lignes qui ne contiennent pas le mot « linux ».

Et comme vous pouvez le voir, la sortie de la première commande ne contient pas le mot « linux ». La deuxième commande sert uniquement à démontrer que ‘linux’ est présent dans la base de données.

Recherche contextuelle

Une chose que j’aime dans la capacité de rga à rechercher des bases de données, en particulier, est qu’il peut non seulement rechercher votre correspondance, mais également fournir un contexte pertinent (lorsqu’on le lui demande). Bien que la recherche dans les bases de données ne soit pas spéciale, c’est toujours un Oh wow, it can do that?! moment.

Une recherche contextuelle est effectuée à l’aide des trois options suivantes :

  • -A: affiche le contexte après la ligne correspondante
  • -B: affiche le contexte avant la ligne correspondante
  • -C: affiche le contexte avant et après la ligne correspondante

Si cela semble déroutant, ne vous inquiétez pas. Je vais discuter de chaque option pour vous aider à mieux la comprendre.

Utilisation de l’option -C

Pour vous montrer de quoi je parle, examinons la commande suivante et sa sortie. Ceci est un exemple d’utilisation de la -C.

rga -C 2 'red hat enterprise linux'
Recherche entièrement contextuelle à l'aide de rga

Comme vous pouvez le voir, non seulement j’obtiens la correspondance à partir de mon fichier de base de données, mais je peux également voir les lignes qui sont chronologiquement avant la correspondance et également les lignes qui sont après la correspondance. Cela n’a pas mélangé mes lignes au hasard, ce qui est plutôt agréable car je n’ai pas utilisé de clés pour numéroter chaque ligne.

Vous vous demandez peut-être si quelque chose ne va pas. J’ai spécifié ‘2’, mais je n’ai obtenu que ‘1’ ligne après. Eh bien, c’est parce qu’il n’y a pas de ligne après la ligne « fedora linux » dans ma base de données. 🙂

Utilisation de l’option -A

Pour mieux comprendre l’utilisation de -Aregardons un exemple.

rga -A 2 Yours
Recherche contextuelle (après) à l'aide de rga

Je vois que c’est une sorte de lettre… Je me demande ce qu’il y avait dans le corps.

Utilisation de l’option -B

Je pense que ce document est incomplet… Mettons en contexte les lignes qui le précèdent.

Pour voir les lignes précédentes, nous devons utiliser le -B.

rga -B 6 Yours
Recherche contextuelle (avant) à l'aide de rga

Comme vous pouvez le voir, j’ai demandé Show me the 6 lines that come before my matched line et j’ai eu ceci dans la sortie. Assez pratique pour certaines situations, vous ne pensez pas ?

Recherche multithread

Étant donné que ripgrep-all est un wrapper autour de ripgrep, vous pouvez utiliser diverses options que LinuxHandbook a déjà couvert.

L’une de ces options est le multithreading. Par défaut, ripgrep choisit le nombre de threads en fonction de l’heuristique. Et donc, ripgrep-all fait la même chose aussi.

Cela ne veut pas dire que vous ne pouvez pas les spécifier vous-même ! 🙂

L’option de le faire est -j. Utilisez-le comme ceci :

rga -j NUM-OF-THREADS

Il n’y a pas d’exemple pratique pour le montrer de manière fiabledonc je vais laisser ça pour que vous le testiez vous-même 😉

Mise en cache

L’un des principaux arguments de vente de rga, en plus de prendre en charge le grand nombre d’extensions de fichiers, est qu’il met efficacement en cache les données.

Par défaut, selon l’OS, les répertoires suivants stockeront le cache généré par rga :

  • Linux : ~/.cache/rga
  • Mac OS : ~/Library/Caches/rga

Je vais d’abord exécuter la commande suivante pour supprimer mon cache :

rm -rf ~/.cache/rga

Une fois le cache vidé, je lancerai une simple requête 2 fois. Je m’attends à voir une amélioration des performances la deuxième fois.

time rga -i linux > /dev/null
time rga --rga-no-cache -i linux > /dev/null
Mise en cache automatique effectuée par rga

J’ai délibérément choisi le modèle ‘linux’ car il apparaît souvent dans le PDF du livre ‘The Linux Command Line’ et aussi dans mon document ‘.odt’ ainsi que dans mon fichier de base de données. Pour vérifier la vitesse, je n’ai pas besoin de vérifier la sortie, elle est donc redirigée vers le fichier ‘/dev/null’.

Je vois que la première fois que la commande est exécutée, elle n’a pas de cache. Mais la deuxième fois que vous exécutez la même commande, l’exécution est plus rapide.

Au final, j’utilise aussi l’option –rga-no-cache, pour désactiver l’utilisation du cache, même s’il est présent. Le résultat est similaire à la première exécution de la commande rga.

Conclusion

rga est le couteau suisse de grep. C’est un outil qui peut être utilisé pour presque tous les types de fichiers et il se comporte de la même manière que grep, du moins avec la regex, moins avec les options.

Mais dans l’ensemble, rga est l’un des outils que je vous recommande d’utiliser. Commentez et partagez votre expérience/pensées !

Vous aimez ce que vous lisez ? Merci de bien vouloir faire circuler.