Buscar cadenas o patrones dentro de texto sin formato desde la terminal
En el siguiente artículo vamos a ver algunas herramientas de línea de comandos que se utilizan para buscar cadenas o patrones coincidentes dentro de archivos de texto. Estas herramientas se utilizan generalmente junto con las expresiones regulares, abreviadas como REGEX, que son cadenas únicas para describir un patrón de búsqueda.
Las expresiones regulares son patrones utilizados para encontrar una determinada combinación de caracteres dentro de una cadena de texto. Las expresiones regulares proporcionan una manera muy flexible de buscar o reconocer cadenas de texto. Aun que en las siguientes líneas no veremos expresiones regulares, utilizaremos patrones o cadenas.
Buscar cadenas o patrones desde la terminal
Comando Grep
Grep es un acrónimo de Global Regular Expression Print. Se trata de una poderosa herramienta para la línea de comandos que resulta útil cuando se busca una cadena específica o un patrón en un archivo. Con grep vamos a poder utilizar una amplia gama de funciones, como las que nos explicó en este mismo blog un compañero hace un tiempo.
La sintaxis para usar el comando grep es bastante simple:
grep PATRON [RUTA AL ARCHIVO]
Por ejemplo, para buscar la cadena ‘Ubuntu‘ en un archivo que en este ejemplo llamaremos texto.txt, sin tener en cuenta la distinción entre mayúsculas y minúsculas, en una terminal (Ctrl+Alt+T) solo tendremos que ejecutar el comando:
grep -i Ubuntu texto.txt
Comando sed
Sed es la abreviatura de Stream Editor. Se trata de otra herramienta útil para la terminal con la que podremos manipular texto en un archivo. Sed busca, filtra y reemplaza cadenas en un archivo dado.
El comando sed imprime de forma predeterminada la salida en STDOUT (Salida estándar). Esto implica que el resultado de la ejecución se imprime en el terminal en lugar de guardarse en un archivo.
El comando Sed se puede utilizar de la siguiente manera:
sed -OPCIONES COMANDO [RUTA AL ARCHIVO]
Por ejemplo, para reemplazar todas las apariciones de ‘Linux‘ en un texto por ‘GnuLinux‘, el comando a utilizar sería el siguiente:
sed 's/Linux/GnuLinux/g' texto.txt
Si lo que buscamos es redirigir la salida a un archivo en lugar de imprimirla en la terminal, vamos a utilizar el signo de redirección de la siguiente manera:
sed 's/Linux/GnuLinux/g' texto.txt > salida.txt
La salida del comando se guarda en el archivo salida.txt en lugar de imprimirse en la pantalla.
Para ver más opciones, se pueden consultar las páginas de manual:
man sed
Ack
Ack es una herramienta de línea de comandos rápida escrita en Perl. Se considera un reemplazo amigable para la utilidad grep, que además genera resultados de una manera visualmente atractiva.
Para instalar ack en nuestro sistema tendremos que ejecutar en la terminal (Ctrl+Alt+T):
sudo apt install ack
El comando Ack busca en el archivo o directorio las líneas que contienen la coincidencia para los criterios de búsqueda. Luego resalta la cadena correspondiente. Esta herramienta tiene la capacidad de distinguir archivos en función de sus extensiones.
La sintaxis del comando Ack sería algo como lo siguiente
ack [OPCIONES] PATRÓN [RUTA AL ARCHIVO]
Por ejemplo, para buscar el término Linux en un archivo, tendríamos que ejecutar:
ack Linux texto.txt
La herramienta de búsqueda es bastante inteligente y si el usuario no proporciona ningún archivo o directorio, esta busca en el directorio y subdirectorios actuales el patrón de búsqueda.
En el siguiente ejemplo, no se proporciona ningún archivo o directorio. Ack detecta automáticamente el archivo disponible en el directorio y busca el patrón coincidente:
ack Linux
Ripgrep
Ripgrep es una utilidad multiplataforma para buscar patrones de expresiones regulares. Es más rápida que todas las herramientas de búsqueda mencionadas anteriormente, y busca en directorios de forma recursiva patrones coincidentes. También permite buscar tipos de archivos específicos. De forma predeterminada, ripgrep omitirá archivos binarios y archivos / directorios ocultos.
Para instalar ripgrep en el sistema, no hay más que ejecutar el siguiente comando en la terminal (Ctrl+Alt+T):
sudo apt install ripgrep
La sintaxis para usar ripgrep es bastante sencilla:
rg [OPCIONES] PATRÓN [RUTA AL ARCHIVO]
Si quisiésemos buscar la cadena ‘Linux‘ en archivos ubicados dentro del directorio actual, solo tendremos que ejecutar el comando:
rg Linux
Para ver más opciones los usuarios podemos utilizar las páginas de manual:
man rg
Silver Searcher
Para instalar esta herramienta, en Ubuntu no tendremos más que abrir una terminal (Ctrl+Alt+T) y escribir el comando:
sudo apt install silversearcher-ag
Silver Searcher es una herramienta de búsqueda de código abierto y multiplataforma similar a ack pero con énfasis en la velocidad. Facilita la búsqueda de una cadena específica dentro de los archivos en el menor tiempo posible. La sintaxis a utilizar sería:
ag OPCIONES PATRÓN_DE_BÚSQUEDA /ruta/al/archivo
Por ejemplo, para buscar ‘Linux‘ en el archivo texto.txt, tendríamos que escribir en la terminal (Ctrl+Alt+T):
ag Linux texto.txt
Para ver más opciones podremos consultar las páginas de manual:
man ag
Estas son solo algunas de las herramientas de línea de comandos más utilizadas para buscar, filtrar y manipular texto en Linux.