El comando grep en Linux

8min

El comando grep es una herramienta poderosa y versátil en el trabajo de la línea de comandos de sistemas operativos Linux. Sin embargo, en muchas ocasiones su extremada potencia también hace que sea un poco difícil de manejar. En este post esperamos poder ayudarte de una manera práctica.

Índice

¿Qué es el comando grep?

El comando grep viene de las siglas «Global Regular Expression Print». Es uno de los comandos más potentes y a veces complejos de utilizar en las terminales de sistemas Linux. Se usa para buscar apariciones de cadenas de texto, que respondan a un patrón dado, dentro de archivos en el disco o dentro de la salida de otros comandos de consola. Puede configurarse con numerosos modificadores que vamos a conocer de manera detallada en este artículo para realizar muchos tipos de búsquedas en nuestro sistema.

Cómo utilizar el comando grep en Linux

A lo largo de este artículo vamos a ver numerosos ejemplos sobre el uso del comando grep, pero antes de introducirnos en ello, queremos explicar algunos puntos importantes para poder entender cómo funciona.

Sintaxis básica de grep

La sintaxis básica del comando grep la podemos ver en el siguiente esquema:

grep [opciones] patrón [archivo...]

Los distintos bloques básicos que debemos conocer son estos:

  • [opciones] son los modificadores que cambian el comportamiento de grep.
  • patrón: El texto o expresión regular que se busca con grep.
  • [archivo…] el archivo o los archivos en los que se busca el patrón

Entendidos los dos puntos anteriores, podemos hacer un ejemplo básico para que resulte claro:

grep 'error' log.txt

El comando anterior buscaría la palabra «error» en un archivo llamado «log.txt».

Búsqueda de patrones simples

Claro que buscar por coincidencias exactas de palabras no es siempre viable a la hora de encontrar apariciones de elementos. Es muy común que el comando grep se utilice especificando patrones los cuales se pueden personalizar de maneras sencillas como vamos a ver ahora. Por ejemplo, podríamos buscar una palabra ignorando mayúsculas y minúsculas con el modificador -i.

grep -i 'factura' factura.txt

Podemos contar el número de apariciones de una palabra determinada con el modificador -c.

grep -c 'euro' archivo.txt

Uso de expresiones regulares con grep

Las expresiones regulares son extremadamente potentes y sería material como para un curso entero, pero aquí podemos ver algunos ejemplos relevantes. Con la siguiente sentencia podemos buscar líneas que comiencen por una palabra dada.

grep '^include' archivo.php

Ahora veamos cómo podemos conseguir lo mismo, pero buscando las palabras al final de la línea.

grep 'palabra$' archivo.txt

En el siguiente comando podemos buscar líneas que contienen caracteres numéricos.

grep '[0-9]' clientes.csv

Filtrado recursivo de directorios con grep

Por supuesto, podemos buscar apariciones en un archivo determinado como hemos visto en los ejemplos anteriores, pero también es posible buscar en el conjunto de archivos que haya dentro de una carpeta, incluso haciendo búsquedas en las carpetas hijas, de modo recursivo.

Para ello simplemente tenemos que utilizar la opción `-r` en el comando grep.

Aquí vemos un ejemplo sobre cómo buscaríamos apariciones de una palabra en un directorio y todos los directorios contenidos en éste.

grep -r 'arsys' /ruta/al/directorio

Opciones avanzadas de grep para búsqueda y filtrado

Como hemos dicho antes el comando grep ofrece innumerables opciones con las que podemos refinar las búsquedas de las cadenas. Vamos a verlo ahora con algunos ejemplos prácticos

Con la opción –exclude, podemos excluir ciertos archivos o directorios de la búsqueda:

grep -r --exclude='*.log' 'http' /var/www

Con la opción -n podemos conseguir visualizar el número de línea de cada coincidencia.

grep -n 'www' archivo.txt

Si queremos conocer únicamente los nombres de los archivos que contienen el patrón dado podemos utilizar la opción -l.

grep -l 'patrón' /ruta/al/directorio/*

Variantes de grep

El comando grep es tan amplio que podemos casi considerarlo un ecosistema de herramientas con sus respectivas variantes. Vamos a ver ahora las más importantes.

grep estándar

Es la versión más común que hemos explicado hasta el momento, para la búsqueda de textos en archivos.

Egrep (grep extendido)

Es una versión de grep que admite expresiones regulares extendidas (ERE). A veces se conoce a este comando como grep extendido. Veamos un ejemplo con expresiones regulares extendidas.

egrep '(patrón1|patrón2)' archivo.txt

Fgrep (grep fijo)

El comando fgrep, o grep fijo permite realizar búsquedas de cadenas de texto literales. Por tanto, no permite el uso de expresiones regulares, pero en cambio es más rápido que grep.

fgrep 'texto literal' clientes.csv

Rgrep (grep recursivo)

Este comando sirve simplemente para realizar las tareas de búsqueda en carpetas y subcarpetas, lo mismo que conseguíamos en el comando grep estándar con la opción -r.

Xgrep (grep XML)

En este caso nos encontramos ante un comando especializado en las búsquedas dentro de archivos XML. El uso básico de xgrep lo podemos ver en el siguiente ejemplo de comando.

xgrep 'patrón' archivo.xml

Casos de uso comunes de grep en desarrollo de software

El comando grep es útil en una amplia variedad de contextos, entre los que se encuentra el desarrollo de software. Gracias a su potencia nos permite realizar búsquedas en múltiples archivos de código dentro de un proyecto o en los datos que maneja una aplicación. Vamos a ver ahora algunos ejemplos de uso comunes.

Depuración de código fuente

Podríamos usar el comando grep para depuración del código fuente. Por ejemplo, para localizar todos los errores que responden a un patrón dentro de un fichero de log.

grep 'ERROR:' app.log

Una vez localizado un error podemos buscar los lugares donde aparece un determinado nombre de función. Por ejemplo podemos ver en el siguiente comando un uso de grep para localizar todas las apariciones de llamadas a la función buscarProducto en archivos .php.

grep -r 'buscarProducto' --include='*.php' /ruta/al/directorio

Búsqueda de texto en archivos de configuración

También podemos utilizarlo para buscar texto en los archivos de configuración de las aplicaciones

grep 'clave_configuración' *.conf

Análisis de archivos de registro de errores (Logs)

Dentro de los archivos de errores de log a veces es difícil encontrar datos, ya que son ficheros que tienden a crecer demasiado. Por ejemplo, podríamos filtrar errores de un día particular de esta manera.

grep '2024-06-08' archivo.log

Identificación de patrones en archivos de registro de aplicaciones

Aparte de errores, en los archivos de registro a veces podemos encontrar información importante que nos permita rastrear situaciones específicas para el debug de las aplicaciones. Por ejemplo, podemos buscar patrones de inicio de sesión en registros, en los que aparezca un texto determinado y cualquier dirección de correo electrónico usada para el inicio de sesión.

grep 'usuario .*@.* inició sesión' archivo.log

Búsqueda y filtrado de resultados en salidas de comandos

Combinando el uso de grep con las tuberías o pipes de la terminal de Linux podemos conseguir buscar apariciones de determinados patrones en la salida de otros comandos, evitando tener que leer grandes cantidades de texto para encontrar lo que buscamos. El siguiente comando nos permitiría filtrar la salida del comando `ps` para encontrar procesos específicos.

ps aux | grep 'nombre_proceso'

Ejemplos de comando grep en Linux

Para acabar vamos a ver otros ejemplos relevantes de diversa utilidad. Por ejemplo, podríamos buscar líneas que no contengan una palabra específica con la opción -v.

grep -v 'error' archivo.txt

A veces también es muy útil buscar por coincidencias de palabras completas y no segmentos de palabras.

grep -w 'cantidad' factura.txt

Esto último nos daría los lugares donde aparece la palabra exacta «cantidad», excluyendo lugares donde por ejemplo se encuentre la palabra «cantidades».

Podemos buscar por varias palabras al mismo tiempo con una expresión como la siguiente:

grep -E 'error|fallo' LOG.txt

El comando grep ofrece innumerables alternativas, incluso la personalización de la presentación de las apariciones. Por ejemplo podríamos necesitar ver las siguientes líneas a la aparición de una coincidencia:

grep -A 3 'error' archivo.txt

O mostrar los errores de manera resaltada en el terminal:

grep --color=auto 'error' archivo.txt

Esperamos que con todas estas indicaciones y ejemplos sobre el comando grep hayas podido aprender a utilizarlo y apreciar la cantidad de cosas en las que te puede ayudar. 

Fernán García de Zúñiga

Productos relacionados: