Búsqueda de sitios web

Usando el comando ripgrep en Linux


Es posible que ripgrep basado en Rust no sea un reemplazo exacto del comando grep clásico, pero proporciona muchas funciones de búsqueda útiles como el comando grep.

ripgrep es un resultado excelente del esfuerzo RIIR (reescribirlo en Rust) que se está llevando a cabo en la comunidad de código abierto. Está destinado a ser un reemplazo superior del clásico comando grep.

La sintaxis para utilizar ripgrep es la siguiente:

rg <pattern> [files/directories]

Con ripgrep, no es necesario mencionar el nombre del archivo. Cuando no se proporciona un nombre de archivo, se buscan todos los archivos. Esto es increíblemente útil si no sabe qué archivo contiene el patrón que busca.

También puede utilizar grep para buscar en todos los archivos, pero ripgrep lo hace sin ningún esfuerzo adicional.

¿Qué es ripgrep?

ripgrep es una herramienta recursiva de coincidencia de patrones de expresiones regulares que considera su gitignore. Si tiene archivos, extensiones o directorios específicos en su gitignore, ripgrep los ignorará, acelerando el tiempo de ejecución.

Algunas características que hacen que ripgrep se destaque son las siguientes:

  • Busca patrones de forma recursiva en directorios.

  • Resaltado de color en la salida.

  • Admite una gran variedad de formatos de codificación como UTF-8, SHIFT_JIS

  • Posibilidad de buscar en archivos zip comprimidos

  • Ignora los archivos ocultos de forma predeterminada y utiliza su archivo gitignore para una búsqueda más rápida

Puede considerarlo como grep, pero su objetivo principal es buscar archivos/contenido de archivos en lugar del flujo de bytes sin formato del que trata grep.

Instalar ripgrep

Si bien grep viene preinstalado en la mayoría de los sistemas Linux, ripgrep no tiene ese privilegio.

Sin embargo, está disponible en los repositorios de las principales distribuciones de Linux y puede utilizar el administrador de paquetes para instalarlo.

Si eres usuario de Arch Linux, ya sabes cómo instalar paquetes :p, pero aún así, aquí tienes el comando que debes usar:

pacman -S ripgrep

Los usuarios de Gentoo pueden instalar ripgrep con el siguiente comando:

emerge sys-apps/ripgrep

Si usas Fedora o Red Hat, inclínate un poco mientras escribes este comando en tu terminal:

sudo dnf install ripgrep

Los usuarios de openSUSE (15.1 y posteriores) deben usar el siguiente comando en su terminal:

sudo zypper install ripgrep

Para usuarios que usan Debian Buster (v10) o posterior, use apt. Ubuntu Cosmic Cuttlefish (18.10) o posterior también puede utilizar los repositorios oficiales de la distribución.

sudo apt install ripgrep

Usando el comando ripgrep

Si está familiarizado con el uso del comando grep, encontrará que ripgrep funciona de manera similar. Le proporciona una cadena de búsqueda y un nombre de archivo, buscará el archivo y le mostrará dónde coincidió la cadena de entrada con el contenido del archivo.

Para este tutorial, he clonado el repositorio del proyecto Dust y ejecutaré los comandos dentro del repositorio clonado.

Búsquedas básicas

Un ejemplo de búsqueda de la palabra descripción en el archivo Cargo.html:

$ rg description Cargo.toml
3:description = "A more intuitive version of du"
53:extended-description = """\

Como era de esperar, la herramienta ripgrep buscó en el archivo que especifiqué y mostró los archivos con el texto coincidente y el número de línea.

Si especifica varios archivos para buscar (si no especifica ningún archivo, buscará todos), ripgrep también determinará el nombre del archivo cuyo contenido coincidió.

Alternativamente, también puedes usar la opción '--file', que contiene el patrón que deseas hacer coincidir. Cuando busca regularmente un conjunto de patrones que coincidan, puede almacenarlo en un archivo y especificarlo usando la opción '--file'.

búsqueda contextual

A veces, es bueno tener un contexto de la línea coincidente, especialmente cuando se busca en un repositorio de código. La opción '-C' o '--context' ayuda aquí. Esta opción acepta un valor numérico y muestra líneas antes y después del partido.

Puede haber ocasiones en las que solo desee ver unas pocas líneas arriba, incluida la línea coincidente. A veces, solo desea las líneas de abajo, incluida la que coincide.

Puede usar la opción '-A', abreviatura de '--after-context' y un valor numérico para mostrar líneas después de cada coincidencia.

Y para las líneas antes de cada coincidencia, puede usar la opción '-B', abreviatura de '--before-context', junto con un valor numérico.

columnas

Hay varias opciones con respecto a las columnas que proporciona ripgrep.

Apreciarás la bandera '--column' si eres un usuario de vim. Imprime la 'línea:columna' del texto coincidente en el archivo.

Otra opción relacionada con las columnas es '-M' o '--max-columns', que toma un valor numérico para el número máximo de columnas. Si las columnas de líneas coincidentes exceden, le permitirá saber que se omitió la salida de una línea en particular al terminal.

Varios

Hay varias opciones que puedes usar con ripgrep.

Puede utilizar la opción '-s' o '--case-responsive' para hacer coincidir el texto con distinción entre mayúsculas y minúsculas.

Si desea que no se distinga entre mayúsculas y minúsculas, puede utilizar el indicador '-i' o '--ignore-case'.

Si tiene una base de código enorme, puede utilizar varios subprocesos para la coincidencia de patrones. Puede especificar subprocesos manualmente utilizando la opción '-j' o '--threads'; acepta un valor numérico.

$ rg -j 4 TODO

Puede haber ocasiones en las que desee excluir un patrón de los resultados de búsqueda. Para hacer eso, puede usar '-v' o '--invert-match' para excluir el patrón especificado.

ripgrep puede buscar texto en un archivo comprimido (si el archivo comprimido es un archivo de texto) usando el indicador '-z' o '--search-zip'. Este indicador suele ir acompañado del indicador '-a' que trata los archivos binarios como archivos de texto.

Conclusión

ripgrep es una herramienta fantástica que puedes aprovechar, especialmente como programador en un entorno tipo UNIX.

ripgrep, aunque el nombre pueda sugerir lo contrario, no pretende reemplazar a grep porque se comporta de manera diferente. Pero ambas herramientas son útiles de todos modos; Depende de su caso de uso.