Guía completa del comando grep en Ubuntu

Introducción

En entornos Linux, el comando grep es una herramienta imprescindible para analizar archivos de texto de gran tamaño o logs del sistema. En este artículo, exploraremos las técnicas esenciales en la terminal de Ubuntu para ejecutar grep, localizar rápidamente las cadenas deseadas e interpretar con precisión los resultados obtenidos en situaciones reales de trabajo.

Búsqueda básica de cadenas y opción para ignorar mayúsculas/minúsculas (-i)

Para crear y acceder a un espacio de trabajo aislado destinado a la práctica del comando grep, ejecutamos el comando mkdir -p ~/grep_demo && cd ~/grep_demo.

mkdir -p ~/grep_demo && cd ~/grep_demo

Para generar un archivo de texto con cadenas de ejemplo que utilizaremos en las pruebas de búsqueda, ejecutamos el comando echo -e 'Ubuntu Linux Server\nubuntu desktop\nDebian GNU/Linux' > sample.txt.

echo -e ‘Ubuntu Linux Server\nubuntu desktop\nDebian GNU/Linux’ > sample.txt

El comando grep busca patrones o cadenas específicas dentro de archivos o texto y muestra las líneas que coinciden.
De forma predeterminada, distingue estrictamente entre mayúsculas y minúsculas, por lo que solo se encontrarán las líneas que contengan exactamente Ubuntu.
⚙️ [Opciones principales]

-i : Ignora la distinción entre mayúsculas y minúsculas al buscar el patrón coincidente.
-v : Invierte la búsqueda mostrando únicamente las líneas que no coinciden con el patrón especificado.
-n : Muestra junto con el resultado el número de línea donde se encuentra la coincidencia.
-c : Cuenta e imprime únicamente el número total de líneas coincidentes.
-r : Busca de manera recursiva en todos los archivos dentro de los subdirectorios.
-l : Lista únicamente los nombres de los archivos que contienen coincidencias.
-E : Realiza la búsqueda utilizando expresiones regulares extendidas (ERE).

grep ‘Ubuntu’ sample.txt

Al agregar la opción -i, la búsqueda no distingue entre mayúsculas y minúsculas.
Por lo tanto, se mostrarán tanto las líneas que contienen Ubuntu con mayúscula inicial como aquellas con ubuntu en minúsculas.

grep -i ‘ubuntu’ sample.txt

Mostrar números de línea (-n) e invertir la coincidencia (-v)

Para generar datos de logs simulados que usaremos en la práctica de análisis de logs, ejecutamos el comando echo -e 'INFO: Service started\nERROR: Connection timeout\nINFO: Request handled\nERROR: Disk full' > app.log.

echo -e ‘INFO: Service started\nERROR: Connection timeout\nINFO: Request handled\nERROR: Disk full’ > app.log

Al utilizar la opción -n, se muestra el número de línea correspondiente junto con las líneas que coinciden con el patrón buscado.
Esto permite ver tanto el contenido como el número de línea donde aparece la cadena ERROR, facilitando la identificación rápida del lugar donde ocurrió el problema.

grep -n ‘ERROR’ app.log

Al utilizar la opción -v, se invierte la búsqueda para mostrar únicamente las líneas que no coinciden con el patrón indicado.
Esto permite filtrar y revisar únicamente las líneas relacionadas con errores, excluyendo las entradas INFO que representan un estado normal.

grep -v ‘INFO’ app.log

Búsqueda recursiva en subdirectorios (-r) y mostrar solo nombres de archivo (-l)

Para preparar la práctica de búsqueda recursiva, creamos una estructura de subdirectorios de almacenamiento ejecutando el comando mkdir -p ~/grep_demo/logs/archive.

mkdir -p ~/grep_demo/logs/archive

Para generar un archivo de log de error de base de datos para la prueba, ejecutamos el comando echo 'database error' > ~/grep_demo/logs/db.log.

echo ‘database error’ > ~/grep_demo/logs/db.log

Para generar un archivo de log de caché que representa operaciones normales, ejecutamos el comando echo 'cache hit' > ~/grep_demo/logs/cache.log.

echo ‘cache hit’ > ~/grep_demo/logs/cache.log

Para probar la exploración en subdirectorios creando un log de errores antiguos, ejecutamos el comando echo 'fatal error occurred' > ~/grep_demo/logs/archive/old.log.

echo ‘fatal error occurred’ > ~/grep_demo/logs/archive/old.log

Al combinar las opciones -r y -n, la búsqueda desciende recursivamente por los subdirectorios y muestra los números de línea junto con las coincidencias encontradas.
Se mostrarán las rutas de los archivos, los números de línea y el contenido correspondiente a la cadena error en los archivos situados tanto en el directorio logs como en el subdirectorio archive.

grep -rn ’error’ ~/grep_demo/logs

Si añadimos la opción -l y ejecutamos el comando como -rl, en lugar de mostrar las líneas coincidentes, se imprimirá únicamente la lista de rutas de los archivos que contienen el patrón.
Esto resulta muy útil para identificar de forma rápida qué archivos presentan un error entre una gran cantidad de archivos de registro.

grep -rl ’error’ ~/grep_demo/logs

Visualización del contexto circundante (-A, -B, -C) y resaltado en color

Para practicar el seguimiento del progreso de un proceso paso a paso y la revisión del contexto de un error, generamos un archivo de log de muestra ejecutando el comando echo -e 'Step 1: Init\nStep 2: Load Config\nStep 3: Critical Failure\nStep 4: Cleanup\nStep 5: Exit' > process.log.

echo -e ‘Step 1: Init\nStep 2: Load Config\nStep 3: Critical Failure\nStep 4: Cleanup\nStep 5: Exit’ > process.log

Al usar las opciones -B y -A, se muestran junto con la coincidencia un número determinado de líneas anteriores (Before) y posteriores (After).
Con la opción --color=always se resalta en color la frase coincidente Critical Failure, permitiendo observar 1 línea previa y 2 líneas posteriores para comprender el flujo de trabajo antes y después de que ocurra el fallo.

grep –color=always -B 1 -A 2 ‘Critical Failure’ process.log

Al usar la opción -C, se imprime de una sola vez la misma cantidad de líneas tanto antes como después de la coincidencia (Context).
Al mostrarse simultáneamente 1 línea inmediatamente anterior y 1 línea posterior a la línea que contiene Critical Failure, se puede examinar el contexto esencial de forma mucho más concisa.

grep –color=always -C 1 ‘Critical Failure’ process.log

Hasta aquí hemos revisado los aspectos esenciales del comando grep en Ubuntu, desde sus opciones básicas de búsqueda hasta su aplicación práctica en el análisis de logs.
Le recomendamos aplicar activamente estos patrones en su trabajo diario en la terminal para elevar su productividad al siguiente nivel.