Saltar al contenido
Todo sobre trucos y tutoriales de Android

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/patrones disponible específicamente para buscar texto dentro del código fuente. Una buena herramienta de búsqueda es un salvavidas para los desarrolladores que confían 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 facilitarán la vida al buscar texto dentro de los archivos.

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

  • reconocer
  • agricultura
  • Ripgrep
  • git grep
  • Tamizar
  • buscador de platino

1) reconocimiento

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 tiene un mejor resaltado de coincidencias y formatea la salida claramente.

Instalar ACK en Ubuntu

# sudo apt-get install ack-grep

Instalar ACK en CentOS

# sudo yum install ack

En Ubuntu, ya existe un paquete disponible con el nombre ‘ack’ que no tiene nada que ver con la búsqueda. Así que los empaquetadores cambiaron 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 a través de 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 descubrió que la búsqueda de plata es 34 veces más rápida que la de ack al buscar el mismo texto en los archivos de origen.

TE PUEDE INTERESAR:  Bpytop: un monitor de recursos eficiente en Linux

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 recursivamente 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 versión.

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 archivos JavaScript de su búsqueda. A diferencia de GNU grep, ripgrep se mantiene rápido mientras admite 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 la 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 utiliza 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 entiende los archivos .gitignore y se puede configurar para mostrar solo 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> 50 GB. Otra característica interesante de tamizar es que puede especificar varias condiciones mientras busca texto como:

TE PUEDE INTERESAR:  Cómo conectar Ubuntu Linux de forma remota desde Windows a través de RDP

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

sift viene como un único ejecutable sin dependencias y está disponible para todas las plataformas principales. Así que puedes instalarlo en cualquier plataforma fácilmente.

Descargue sift desde 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 de sift, consulte la 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 es un lenguaje de programación escrito en Go. Se afirma 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 expresión regular 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 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) en 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:
punto [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 de 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, ya que se instaló junto con la instalación de git.

Para el uso de git grep, consulte la página del manual de git-grep

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ápida y multiplataforma, mientras que silver searcher (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.