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
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.
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:
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/
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