ag la alternativa a grep

Una de las herramientas que utilizo con mas frecuencia en el terminal es grep. Lo utilizo tanto en el modo depuración, para la búsqueda de errores, como cuando estoy buscando un archivo entre toda la documentación que se encuentra en mi equipo. Todos los artículos publicados aquí, en atareao.es, los tengo organizados en directorios por años y por artículo. De esta forma buscar un determinado artículo, puede ser algo realmente largo e incluso tedioso. En estos casos utilizo grep. Pero, por supuesto, que no es la única herramienta que tienes disponible, también tienes ag, The Silver Searcher, un buscador enfocado en la rapidez.

De hecho, grep es un comando completamente integrado con Vim, de forma que utiliza este comando a la hora de realizar sus búsquedas. Sin embargo, es posible, reemplazar esta herramienta por ag para dotar a Vim de mayor rapidez en sus búsquedas de texto.

Sea como fuere, que utilizas grep para tus búsquedas de archivos o integrado en Vim, por ejemplo, en este artículo, te comentaré sobre ag, y como puedes aumentar tu productividad con esta herramienta.

buscar. ag la alternativa a grep

ag una alternativa a grep

ag es una herramienta completamente enfocada en la búsqueda de texto en archivos, y en la velocidad. Se trata de una herramienta muy, pero que muy, rápida. Algo a lo que le tienes que sacar partido.

Además si eres de los que trabaja siempre con código, puedes hacer que esta herramienta ignore la búsqueda en algunos archivos, añadiendo esos archivos, o la extensión de esos archivos en un .gitignore. Así de fácil.

Instalación

ag, The Silver Searcher, se encuentra en los repositorio oficiales de Ubuntu y de la mayoría de distribuciones, por lo que, instalarlo, es tan sencillo como ejecutar,

sudo apt install silversearcher-ag

Uso y funcionamiento

Una vez instalado, ya puedes sacar partido a esta herramienta de búsqueda de texto. Así, algunos usos rápidos de esta herramienta pueden ser los siguiente,

  • ag código buscará la palabra código entre todos los archivos imprimiendo el archivo y la línea del archivo donde la ha encontrado
  • Si quieres hacer lo mismo que en el punto anterior pero solo en los archivos de la ruta ruta/a/directorio, lo que tienes que ejecutar es ag código ruta/a/directorio.
  • Si solo quieres ver en que archivos se encuentra, tienes que ejecutarlo como ag -l código. Pero si quieres ver el archivo y la línea en la que se encuentra, pero solo imprimir la coincidencia, utiliza ag -o código.
  • ¿Y si no quieres tener en cuenta si está en mayúsculas o minúsculas?. En este caso la forma de ejecutarlo es ag -i código. Igual que en el caso anterior, si además solo quisieras ver la coincidencia, tendrías que utilizar ag -i -o código o en su versión mas abreviada ag -io código.
  • En el caso de que quieras buscar la palabra en cuestión, en archivos que cumplan un determinado patrón puedes ejecutar ag código -G txt o ag código -G <nombre-del-archivo>.
  • Por supuesto, y como no podía ser de otra forma, ag, también te permite buscar por expresiones regulares. Así, en el caso de que quieras buscar archivos que tengan frases que comiencen con la palabra Código, podrías hacerlo con ag '^Código\s'.

Filtrado por tipo de archivo

Pero sin lugar a dudas, uno de las grandes ventajas de utilizar ag para tus búsquedas es la posibilidad de buscar por tipo de archivo. En lugar de buscar en todos los archivos, puedes buscar únicamente en los archivos de un determinado formato. Para conocer todos los archivos soportados ejecuta ag --list-file-types.

Así, por ejemplo, si quisieras buscar la palabra código en todos los archivos de tipo markdown tendrías que ejecutar lo siguiente con grep,

find . -type f -name "*.md" -exec grep "código" {} \;

Esto mismo, ejecutado utilizando ag queda de la siguiente manera,

ag --md código

Por supuesto, no solo se trata de que la instrucción utilizada es mucho mas corta. También está en la rapidez. Así, ejecutando estas dos instrucciones en mi directorio de artículos, los resultados fueron los siguientes,

  • Para el caso de grep => 1,488s
  • En el caso de ag => 0,295s

No hace falta que te diga nada al respecto. Está muy clara la diferencia entre realizar la búsqueda con grep y con ag.

Infinidad de opciones

Estos ejemplos que te he indicado anteriormente, no son mas que la punta del iceberg de las opciones que ofrece ag para realizar las búsquedas.

Así puedes indicarle que te muestre algunas líneas antes de la coincidencia con -B o después de la coincidencia con -A. Puedes que te indique solo el número de apariciones por archivo con -c. Puedes indicarle que haga o no, búsquedas recursivas e indicar el número de niveles de búsqueda en directorios con --depth, o que siga enlaces simbólicos. Igualmente, puedes indicarle que solo imprima las líneas muy largas, o que no tenga en cuenta mayúsculas o minúsculas. Y por supuesto, puedes mostrar las estadísticas de las búsquedas utilizando --stats. Esto te muestra un resultado como el que puedes ver a continuación,

444 matches
186 files contained matches
761 files searched
4851772 bytes searched
0.258351 seconds

Vamos, que si quieres saber todas las opciones que te ofrece esta herramienta, tienes que recurrir a man ag

Configuración con Vim

Si quieres utilizar ag con Vim, tienes un estupendo complemento que te hará la vida mas fácil, se trata de ack.vim. Aunque este complemento está pensado para utilizarlo con ack, lo puedes particularizar para ag, añadiendo alguna de las siguientes instrucciones,

let g:ackprg = 'ag --nogroup --nocolor --column'

o

let g:ackprg = 'ag --vimgrep'

Otra opción, si no quieres añadir un nuevo complemento a tu configuración de Vim, es incluir lo siguiente,

if executable('ag')
  " Use ag over grep
  set grepprg=ag\ --nogroup\ --nocolor

  " Use ag in CtrlP for listing files. Lightning fast and respects .gitignore
  let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'

  " ag is fast enough that CtrlP doesn't need to cache
  let g:ctrlp_use_caching = 0
  " bind K to grep word under cursor
  nnoremap K :grep! "\b<C-R><C-W>\b"<CR>:cw<CR>
  " bind \ (backward slash) to grep shortcut
  command -nargs=+ -complete=file -bar Ag silent! grep! <args>|cwindow|redraw!
  nnoremap \ :Ag<SPACE>
endif

Más información,

Imagen de portada de Chase Clark en Unsplash

Deja una respuesta

Tu dirección de correo electrónico no será publicada.