LINUX

6 herramientas para buscar código fuente para desarrolladores en Linux

Mientras busca texto en archivos dentro de una estructura de directorio desde el símbolo del sistema / shell, hay muchas herramientas disponibles en Linux. La herramienta más antigua y ampliamente utilizada es grep, que significa impresión de expresión regular global. Hay algunos problemas con grep como que no es tan rápido al buscar archivos de código fuente. Hay otra herramienta de búsqueda de texto / patrón disponible específicamente para buscar texto dentro del código fuente: ack. Una buena herramienta de búsqueda es un salvavidas para los desarrolladores que se basan en el indicador de shell, un editor como vi o emacs o un IDE para escribir códigos.

En este artículo, cubriré los conceptos básicos de algunas herramientas de búsqueda que harán la vida más fácil al buscar texto dentro de archivos.

Las herramientas de búsqueda que exploraremos en este tutorial son:

  • Ack
  • Ag
  • Ripgrep
  • Git grep
  • Tamizar
  • Buscador de platino

1) ACK

Ack es una herramienta de búsqueda de código, similar a grep pero optimizada para programadores que buscan grandes árboles de código fuente. Se ejecuta en Perl puro, es altamente portátil y se ejecuta en cualquier plataforma que ejecute Perl. De forma predeterminada, ACK busca directorios de forma recursiva e ignora los directorios de control de versiones comunes de forma predeterminada como .git, .gitignore, .svn También ignora archivos binarios, archivos de imagen / música / video, archivos gzip / zip / tar. La salida de ack resalta mejor las coincidencias y formatea la salida con claridad.

Instalar ACK en Ubuntu

# sudo apt-get install ack-grep

Instalar ACK en CentOS

# sudo yum install ack

En Ubuntu, ya hay un paquete disponible con el nombre ‘ack’ que no tiene nada que ver con la búsqueda. Entonces, los empaquetadores habían cambiado el nombre de esta herramienta de búsqueda como ack-grep. Una vez que lo haya instalado usando apt-get, puede cambiar / acortar su nombre a ack usando el siguiente comando.

# sudo dpkg-divert --local --divert /usr/bin/ack --rename --add /usr/bin/ack-grep

Para encontrar todas las opciones que puede usar mientras ejecuta el comando ack, use el siguiente comando man

# man ack

2) Ag – el buscador de plata

Ag también es una herramienta de búsqueda de código como ack, pero es significativamente más rápida que ack. En comparación con ack, puede buscar en archivos comprimidos y tener una mejor integración con el editor (vim). Al igual que ack, ag también ignora los patrones de archivo de .gitignore y .hgignore. El uso básico de Ag es simple: cd al directorio que desea buscar y ejecute ag blah para encontrar instancias de «blah». Se ha descubierto que la búsqueda de plata es 34 veces más rápida que ack mientras se busca el mismo texto en archivos de origen.

Instalar Ag en Ubuntu

# sudo apt-get install silversearcher-ag

Instalar Ag en CentOS

# sudo yum install -y automake pcre-devel

# sudo yum install xz-devel

# cd /usr/local/src

# sudo git clone https://github.com/ggreer/the_silver_searcher.git

# cd the_silver_searcher

# sudo ./build.sh

# sudo make install

# which ag
/usr/local/bin/ag

Para encontrar todas las opciones que puede usar mientras ejecuta el comando ag, use el siguiente comando man

# man ag

3) ripgrep (rg)

Ripgrep es una herramienta de búsqueda orientada a líneas que combina la usabilidad de The Silver Searcher (similar a ack) con la velocidad bruta de GNU grep. ripgrep funciona buscando de forma recursiva en su directorio actual un patrón de expresiones regulares. ripgrep tiene soporte de primera clase en Windows, Mac y Linux, con descargas binarias disponibles para cada lanzamiento.

Ripgrep es más rápido que Silver Searcher y GNU grep. Al igual que The Silver Searcher, ripgrep también utiliza de forma predeterminada la búsqueda de directorio recursiva y no buscará archivos ignorados por sus archivos .gitignore. También ignora los archivos ocultos y binarios de forma predeterminada. Ripgrep puede buscar tipos específicos de archivos. Por ejemplo, ‘rg -tpy foo’ limita su búsqueda a archivos Python y ‘rg -Tjs foo’ excluye los archivos JavaScript de su búsqueda. A diferencia de GNU grep, ripgrep se mantiene rápido mientras es compatible con Unicode.

Instalación del binario ripgrep en Ubuntu / CentOS

# wget https://github.com/BurntSushi/ripgrep/releases/download/0.4.0/ripgrep-0.4.0-i686-unknown-linux-musl.tar.gz

# tar xf ripgrep-0.4.0-i686-unknown-linux-musl.tar.gz

# cd ripgrep-0.4.0-i686-unknown-linux-musl

# mv rg /usr/local/bin

# which rg
/usr/local/bin/rg

El uso de rg se describe en página de github de ripgrep

4) Tamizar

Sift es otra herramienta de búsqueda que se desarrolla teniendo en cuenta tanto la velocidad como la flexibilidad. Sift usa un formato de expresión regular compatible con Perl con opciones básicas conocidas de grep pero con valores predeterminados utilizables. Puede seleccionar o excluir objetivos según el nombre del archivo, el nombre del directorio, la ruta y el tipo. Al igual que las herramientas de búsqueda anteriores, sift comprende los archivos .gitignore y se puede configurar para que solo muestre los resultados en los archivos relevantes. Sift tiene soporte multilínea y puede reemplazar la salida para reformatearla según sus necesidades sin depender de awk / sed. Sift también puede buscar a través de archivos gzip y puede manejar la búsqueda dentro de archivos grandes de tamaño> 50GB. Otra característica interesante de sift es que puede especificar varias condiciones mientras busca texto como:

→ precedido por A
→ seguido de B dentro de las líneas X
→ si el archivo también contiene una línea con C
→ si el archivo contiene D en las primeras líneas Y
→ cualquier combinación de las condiciones disponibles

sift viene como un solo ejecutable sin dependencias y está disponible para todas las plataformas principales. Para que puedas instalarlo en cualquier plataforma fácilmente.

Descargue sift de la sección de descargas del sitio oficial de sift, descomprímalo y muévalo a cualquier ubicación señalada por la variable de entorno PATH.

# wget https://sift-tool.org/downloads/sift/sift_0.9.0_linux_386.tar.gz

# tar xf sift_0.9.0_linux_386.tar.gz

# cd sift_0.9.0_linux_386

# mv sift /usr/local/bin

# which sift
/usr/local/bin/sift

Para el uso del tamiz, consulte el documentación de sift-tool.org

5) pt – El buscador de platino

Otra utilidad de búsqueda de código fuente similar a ack y ag es Platinum Searcher (pt), que está escrito en el lenguaje de programación Go. Se dice que es de 3 a 5 veces más rápido que ack. Pt es más seguro ya que está escrito en un lenguaje seguro para la memoria y utiliza el paquete de expresiones regulares estándar de Go, lo que le permite evitar la coincidencia de tiempo exponencial. Platinum Searcher puede buscar no solo en archivos codificados con UTF-8, sino también en EUC-JP y Shift_JIS, lo que lo hace muy útil para los programadores japoneses.

Instalación y uso de pt

Los binarios de Platinum Searcher están disponibles para Windows, Mac OS X, Linux (incluido ARM) desde su página de versiones de Github. Descargue el binario y muévalo a una ubicación señalada por $ PATH y comience a buscar.

# wget https://github.com/monochromegane/the_platinum_searcher/releases/download/v2.1.5/pt_linux_386.tar.gz

# tar xf pt_linux_386.tar.gz

# cd pt_linux_386/

# mv pt /usr/local/bin

# which pt
/usr/local/bin/pt

Para buscar un patrón en el directorio actual y todos sus subdirectorios, simplemente escriba:

# pt PATTERN

Uso:
pt [OPTIONS] PATRÓN [PATH]

Application Options:
--color                             Print color codes in results (Enabled by default)
--nocolor                         Don't print color codes in results (Disabled by default)
--nogroup                        Don't print file name at header (Disabled by default)
-l, --files-with-matches     Only print filenames that contain matches
--vcs-ignore=                  VCS ignore files (.gitignore, .hgignore, .ptignore)
--noptignore                    Don't use default ($Home/.ptignore) file for ignore patterns
--noglobal-gitignore          Don't use git's global gitignore file for ignore patterns
-U, --skip-vsc-ignores      Don't use VCS ignore file for ignore patterns. Still obey .ptignore
--ignore=                        Ignore files/directories matching pattern
-i, --ignore-case              Match case insensitively
-S, --smart-case              Match case insensitively unless PATTERN contains uppercase characters
-g=                                 Print filenames matching PATTERN
-G, --file-search-regexp= PATTERN Limit search to filenames matching PATTERN
--depth=                         Search up to NUM directories deep (Default: 25)
-f, --follow                       Follow symlinks
-A, --after=                     Print lines after match
-B, --before=                  Print lines before match
-C, --context=                 Print lines before and after match
-o, --output-encode=       Specify output encoding (none, jis, sjis, euc)
-e                                  Parse PATTERN as a regular expression (Disabled by default)
-w, --word-regexp           Only match whole words
--stats                            Print stats about files scanned, time taken, etc
--version                        Show version

6) Git grep

Git grep busca una expresión regular en un repositorio de Git. En cierto modo, es solo una combinación del combo find / grep, pero muy conciso y rápido. Git grep es una gran herramienta para encontrar todos los usos y referencias a un símbolo en un repositorio de git. No hay una instalación separada para git grep como se instaló al lado, cuando instalas git.

Para el uso de git grep, verifique git-grep página de manual

Conclusión

Hay algunas otras utilidades de búsqueda disponibles como zgrep, agrep, xmlgrep, pdfgrep, etc. Entre todas las herramientas de búsqueda que hemos discutido anteriormente, ripgrep es más rápido y es multiplataforma, mientras que el buscador de plata (ag) es mejor que Ack. Grep está escrito en C pero no ignora los archivos durante la búsqueda, mientras que Ack está escrito en perl y es muy bueno para ignorar archivos.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar