Rest In Peace Grep (RipGrep): una search tool para dominar todas las búsquedas o de por qué debemos dar muerte a grep, ack o silver search

01/20/2018 | Author: Eduardo Enriquez

Si todavía usas grep para buscar cadena de texto, estas en la era de las cavernas, si usas ack pasate a la siguente era, la de piedra. Pero si en cambio estas usando Silver Search se podría decir que ya estas en la edad moderna, pero tal vez debes darle una oportunidad al futuro: Ripgrep, una search tool hecha en rust y programada con automatas finitos.

La cosa es así, estaba usando ack-grep (https://beyondgrep.com/) una tool hecha en Perl para buscar en tu código especificando qué tipo de archivos queres buscar y cuál carpetas ignorar. Además el output era en colores y me decia la linea y el archivo facilmente. 

acl

Estaba contento. Pero me comentaron que ack no estaba muy bueno y que habia algo que era MUCHO mejor, sobre RipGrep (https://github.com/BurntSushi/ripgrep) y una tablita de tiempos sorprendete:

Tool Command Line count Time
ripgrep (Unicode) rg -n -w '[A-Z]+_SUSPEND' 450 0.106s
git grep LC_ALL=C git grep -E -n -w '[A-Z]+_SUSPEND' 450 0.553s
The Silver Searcher ag -w '[A-Z]+_SUSPEND' 450 0.589s
git grep (Unicode) LC_ALL=en_US.UTF-8 git grep -E -n -w '[A-Z]+_SUSPEND' 450 2.266s
sift sift --git -n -w '[A-Z]+_SUSPEND' 450 3.505s
ack ack -w '[A-Z]+_SUSPEND' 1878 6.823s
The Platinum Searcher pt -w -e '[A-Z]+_SUSPEND' 450 14.208s

Basicamente la tabla fue marketinera, ripgrep era infinitamente más rápida que todas las otras. Empecé a usarla tool y la verdad que está muy buena. Si tenes un gitignore lo toma en cuenta y además hace lo del resto:

ripgrep

Además si desconfian, como yo, de los numeros de la tablita, el creador de rg hizo un post muy interesante con todos los benchmarks y comparaciones necesarias: http://blog.burntsushi.net/ripgrep/

rg

INSTALACION

# Ubuntu - Importante el --classic si no queres tener un bug grepiando en /etc
$ snap install rg --classic

# Mac OSX
$ brew install ripgrep

Problemas de permisos con ripgrep en /etc :

https://github.com/BurntSushi/ripgrep/issues/863