Búsqueda de patrones con grep

En Linux, grep es una herramienta muy versátil que nos permite mostrar las líneas de un archivo, o de la salida de otro comando, que concuerden con un patrón dado. Alternativamente, también es posible ignorar las líneas que cumplen con el mismo.

Este patrón puede ser algo tan simple como una sola palabra o complejo como una expresión regular. En este post nos limitaremos a mostrar algunos usos prácticos de grep utilizando una palabra como modelo mientras que en los próximos usaremos expresiones regulares en orden creciente de dificultad.

Mostrar la línea que corresponde a los datos de un usuario en /etc/passwd

El siguiente comando nos permitirá buscar la línea dentro de /etc/passwd donde se encuentran los datos sobre el usuario alumno:

[pastacode lang=»bash» manual=»grep%20alumno%20%2Fetc%2Fpasswd» message=»» highlight=»» provider=»manual»/]

El resultado debería ser parecido al siguiente:

alumno:x:1001:1001::/home/alumno:/bin/bash

Buscar un patrón en todos los archivos de un directorio

En CentOS 7, el directorio /etc/httpd/conf contiene configuraciones varias sobre el servidor web Apache y opcionalmente las definiciones de uno o más virtual hosts. El siguiente comando nos devuelve los archivos donde podemos encontrar la palabra DocumentRoot dentro de dicho directorio. La opción -i nos permite ignorar mayúsculas y minúsculas, mientras que la opción -r nos permite realizar la búsqueda recursivamente en todo el directorio en vez de en un solo archivo:

[pastacode lang=»bash» manual=»grep%20-ir%20documentroot%20%2Fetc%2Fhttpd%2Fconf%2F*» message=»» highlight=»» provider=»manual»/]

El resultado puede variar según el uso que se le dé al servidor web. En mi caso, se muestra en la Fig. 1:

Mostrar un patrón dado recursivamente en los archivos de un directorio
Figura 1: Mostrar un patrón dado recursivamente en los archivos de un directorio

Mostrar las líneas que no contengan un modelo dado

Para mostrar las líneas de un archivo que no contengan un modelo dado, emplearemos la opción -v. El siguiente ejemplo nos mostrará todos los usuarios en /etc/passwd cuya shell no sea bash:

[pastacode lang=»bash» manual=»grep%20-v%20bash%20%2Fetc%2Fpasswd» message=»» highlight=»» provider=»manual»/]

El comando anterior nos puede resultar útil para auditar nuestro servidor y asegurarnos de que ningún usuario o servicio tenga acceso a una consola.

Mostrar las líneas de la salida de un comando que contengan un patrón

El uso clásico de grep consiste en usar el comando seguido de las opciones deseadas y el archivo en el que realizaremos la búsqueda. En el caso de que necesitemos buscar el patrón dentro de la salida de un comando, utilizaremos una tubería para enviar la salida hacia grep. Veamos cómo mostrar de /var/log todo el contenido que contenga la palabra log en el nombre:

[pastacode lang=»bash» manual=»ls%20%2Fvar%20%7C%20grep%20log» message=»» highlight=»» provider=»manual»/]

Como vemos, en el ejemplo anterior utilizamos el comando ls para listar el contenido del directorio, el cual es enviado a grep para hacer luego el filtro.

Espero que les sirva. ¡Hasta el próximo post!

Deja una respuesta