tag:linuxfr.org,2005:/tags/ripgrep/publicLinuxFr.org : les contenus étiquetés avec « ripgrep »2018-06-12T11:19:24+02:00/favicon.pngtag:linuxfr.org,2005:News/384992018-03-19T13:20:19+01:002018-03-19T16:36:14+01:00Des alternatives à grep, ls et findLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<div><p>Les outils en ligne de commande comme <code>ls</code>, <code>grep</code> et <code>find</code> existent depuis de nombreuses années et, même s’ils continuent de s’améliorer, il est parfois intéressant de regarder les alternatives. Je vais vous parler de <code>ripgrep</code>, <code>exa</code> et <code>fd</code>.</p></div><ul><li>lien nᵒ 1 : <a title="https://github.com/BurntSushi/ripgrep" hreflang="en" href="https://linuxfr.org/redirect/101621">Ripgrep</a></li><li>lien nᵒ 2 : <a title="https://the.exa.website/" hreflang="en" href="https://linuxfr.org/redirect/101622">Exa</a></li><li>lien nᵒ 3 : <a title="https://github.com/sharkdp/fd" hreflang="en" href="https://linuxfr.org/redirect/101623">Fd</a></li></ul><div><h3 id="ripgrep">Ripgrep</h3>
<p>Les alternatives à <em>grep</em> ne manquent pas. Déjà, la commande <code>grep</code> de son shell peut être soit le <a href="https://www.gnu.org/software/grep/"><em>grep</em> du projet GNU</a> ou <a href="https://wiki.freebsd.org/BSDgrep">celui du projet BSD</a>. Il y a aussi le <a href="https://git-scm.com/docs/git-grep"><em>grep</em> intégré à Git</a>. Et d’autres outils sont apparus ces dernières années, citons <a href="https://beyondgrep.com/"><em>ack-grep</em></a>, <a href="https://geoff.greer.fm/ag/"><em>ag</em> (<em>the silver searcher</em>)</a>, <a href="https://github.com/monochromegane/the_platinum_searcher"><em>pt</em> (<em>the platinum searcher</em>)</a> et le petit dernier <a href="https://github.com/BurntSushi/ripgrep"><em>ripgrep</em></a>.</p>
<p>Ces outils se battent pour savoir lequel est le plus rapide ou a <a href="https://beyondgrep.com/feature-comparison/">le plus de fonctionnalités</a>. Personnellement, j’utilise <em>ripgrep</em> car il est très rapide, réalise par défaut une recherche récursive dans les répertoires (un gros manque de GNU grep selon moi, mais c’est probablement bien trop tard pour changer le comportement de GNU grep), a une présentation par défaut des résultats que j’apprécie, et il sait chercher dans des fichiers compressés (gzip, bzip2, xz) avec l’option <code>-z</code>.</p>
<h3 id="exa">Exa</h3>
<p>Lister des fichiers est un besoin de base dans un terminal et <code>ls</code> remplit bien ce besoin. <a href="https://the.exa.website/">Exa</a> est une alternative à <code>ls</code> que j’utilise pour ses couleurs, qui viennent par défaut et que je trouve plus agréables que celles de <code>ls</code>. Il propose également une vue arborescente des répertoires et fichiers, qui remplace plutôt <a href="http://mama.indstate.edu/users/ice/tree/"><code>tree</code></a>. Exa est aussi capable d’afficher le statut Git des fichiers et répertoires.</p>
<h3 id="fd">Fd</h3>
<p><a href="https://github.com/sharkdp/fd">Fd</a> peut remplacer avantageusement <code>find</code>. Je n’utilise que très peu l’un ou l’autre, mais <code>fd</code> a une syntaxe plus facile à retenir et il est, d’après ses tests, plus rapide que <code>find</code>. Il utilise par défaut l’encodage UTF-8, il a une sortie colorée et ignore les fichiers listés dans un <code>.gitignore</code>. Et surtout, ça fait deux fois moins de caractères à taper pour le nom de la commande. ;-)</p>
<h3 id="les-points-communs">Les points communs</h3>
<h4 id="vitesse">Vitesse</h4>
<p>On retrouve beaucoup de benchmarks autour de ces outils, les performances sont un vrai enjeu. Mettre trois secondes au lieu de quinze secondes peut paraître anecdotique pour des recherches un peu compliquées, mais cette différence peut casser le rythme : si une commande prend plus de dix secondes, je vais sûrement commencer à aller voir ailleurs.</p>
<h4 id="fonctionnalités-et-comportement-par-défaut">Fonctionnalités et comportement par défaut</h4>
<p>Ces outils ont beaucoup de fonctionnalités : les options que l’on peut passer en ligne de commande permettent de changer fortement leurs comportements. Ceci dit, en pratique, je n’utilise que peu d’options (et quasiment toujours les mêmes). En revanche, j’apprécie beaucoup que ces outils cherchent à avoir le comportement par défaut le plus utile.</p>
<h4 id="intégration-avec-git">Intégration avec Git</h4>
<p>Ces outils ont tous une intégration avec <a href="https://git-scm.com/">Git</a> : <code>ripgrep</code> et <code>fd</code> savent lire les fichiers <code>.gitignore</code> et <code>exa</code> sait afficher l’état Git des fichiers. Ce n’est pas un critère très important à mes yeux car je suis à l’aise avec Git en ligne de commande. Mais c’est intéressant de noter à quel point <code>git</code> est devenu incontournable en ligne de commande.</p>
<h4 id="rust">Rust</h4>
<p>Un fait remarquable est que les trois outils présentés sont écrits en Rust. Il faut croire que ce langage convient bien pour écrire des outils en ligne de commande. C’est un domaine où le temps d’exécution est important (quand on lance une commande, c’est appréciable que le retour soit instantané ou en tout cas très rapide). Les langages de script (JavaScript, Ruby, Python) ont un temps de lancement de leur machine virtuelle qui peut casser cette impression de vitesse, je comprends donc que les développeurs d’outils en ligne de commande puissent s’en éloigner. En revanche, il est plus surprenant de ne pas retrouver d’outils en Go, en D, en OCaml ou en Haskell. Peut‐être que les lecteurs de <em>LinuxFr.org</em> auront une explication à cela.</p></div><div><a href="https://linuxfr.org/news/des-alternatives-a-grep-ls-et-find.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/113986/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/des-alternatives-a-grep-ls-et-find#comments">ouvrir dans le navigateur</a>
</p>
Bruno MichelXavier TeyssierDavy Defaudpalm123https://linuxfr.org/nodes/113986/comments.atom