12 ejemplos prácticos del comando grep de Linux


¿Alguna vez se ha enfrentado a la tarea de buscar una cadena o patrón en particular en un archivo, pero no tiene idea de por dónde empezar a buscar? Bueno, ¡aquí está grep al rescate!

grep es un potente buscador de patrones de archivos que viene equipado con todas las distribuciones de Linux. Si, por alguna razón, no está instalado en su sistema, puede instalarlo fácilmente a través de su administrador de paquetes (apt-get en Debian/Ubuntu y yum en RHEL/CentOS/Fedora).

$ sudo apt-get install grep         #Debian/Ubuntu
$ sudo yum install grep             #RHEL/CentOS/Fedora

Descubrí que la forma más fácil de mojarse los pies con grep es sumergirse y usar algunos ejemplos del mundo real.

1. Buscar y encontrar archivos

Supongamos que acaba de instalar una copia nueva del nuevo Ubuntu en su máquina y que le va a dar una oportunidad a las secuencias de comandos de Python. Ha estado recorriendo la web en busca de tutoriales, pero ve que hay dos versiones diferentes de Python en uso y no sabe cuál fue instalada en su sistema por el instalador de Ubuntu, o si instaló algún módulo. Simplemente ejecute este comando:

# dpkg -l | grep -i python
ii  python2.7                        2.7.3-0ubuntu3.4                    Interactive high-level object-oriented language (version 2.7)
ii  python2.7-minimal                2.7.3-0ubuntu3.4                    Minimal subset of the Python language (version 2.7)
ii  python-openssl                   0.12-1ubuntu2.1                     Python wrapper around the OpenSSL library
ii  python-pam                       0.4.2-12.2ubuntu4                   A Python interface to the PAM library

Primero, ejecutamos dpkg –l, que enumera los paquetes * .deb instalados en su sistema. En segundo lugar, canalizamos esa salida a grep –i python, cuyos estados simples "van a grep y filtran y devuelven todo lo que contenga 'python'". La opción –i está ahí para ignorar mayúsculas y minúsculas, ya que grep distingue entre mayúsculas y minúsculas. Usar la opción –i es un buen hábito para entrar, a menos que, por supuesto, esté tratando de concretar una búsqueda más específica.

2. Buscar y filtrar archivos

El grep también se puede utilizar para buscar y filtrar dentro de archivos individuales o varios archivos. Tomemos este escenario:

Tiene problemas con su servidor web Apache y se ha comunicado con uno de los muchos foros increíbles de la red para pedir ayuda. El alma amable que le responde le ha pedido que publique el contenido de su archivo/etc/apache2/sites-available/default-ssl. ¿No sería más fácil para ti, el tipo que te ayuda y todos los que lo leen, si pudieras eliminar todas las líneas comentadas? ¡Bien tu puedes! Solo ejecuta esto:

# grep –v “#”  /etc/apache2/sites-available/default-ssl

La opción –v le dice a grep que invierta su salida, lo que significa que en lugar de imprimir líneas coincidentes, haga lo contrario e imprima todas las líneas que no coincidan con la expresión, en este caso, las # líneas comentadas.

3. Busque todos los archivos .mp3 solamente

El grep puede ser muy útil para filtrar desde stdout. Por ejemplo, supongamos que tiene una carpeta completa llena de archivos de música en varios formatos diferentes. Quieres encontrar todos los archivos * .mp3 del artista JayZ, pero no quieres ninguna de las pistas remezcladas. Usar un comando de búsqueda con un par de tuberías grep hará el truco:

# find . –name “*.mp3” | grep –i JayZ | grep –vi “remix”

En este ejemplo, estamos usando find para imprimir todos los archivos con una extensión * .mp3, canalizándolo a grep –i para filtrar e imprime todos los archivos con el nombre “JayZ” y luego otro canal a grep –vi que filtra out y no imprime todos los nombres de archivo con la cadena (en cualquier caso) "remix".

4. Mostrar el número de líneas antes o después de la cadena de búsqueda

Otro par de opciones son los conmutadores –A y –B, que muestran la línea coincidente y el número de líneas que vienen antes o después de la cadena de búsqueda. Si bien la página de manual ofrece una explicación más detallada, me resulta más fácil recordar las opciones como –A u003d después y –B u003d antes:

# ifconfig | grep –A 4 eth0
# ifconfig | grep  -B 2 UP

5. Imprime el número de líneas alrededor de la coincidencia

La opción –C de grep es similar, pero en lugar de imprimir las líneas que vienen antes o después de la cadena, imprime las líneas en cualquier dirección:

# ifconfig | grep –C 2 lo

6. Cuente el número de coincidencias

Similar a conectar una cadena grep al conteo de palabras (programa wc), la opción incorporada de grep puede realizar lo mismo para usted:

# ifconfig | grep –c inet6

7. Buscar archivos por cadena dada

La opción –n para grep es muy útil cuando se depuran archivos durante errores de compilación. Muestra el número de línea en el archivo de la cadena de búsqueda dada:

# grep –n “main” setup..py

8. Busque una cadena de forma recursiva en todos los directorios

Si desea buscar una cadena en el directorio actual junto con todos los subdirectorios, puede especificar la opción –r para buscar de forma recursiva:

# grep –r “function” *

9. Busca el patrón completo

Pasar la opción –w a grep busca todo el patrón que está en la cadena. Por ejemplo, usando:

# ifconfig | grep –w “RUNNING”

Imprimirá la línea que contiene el patrón entre comillas. Por otro lado, si intentas:

# ifconfig | grep –w “RUN”

No se devolverá nada, ya que no estamos buscando un patrón, sino una palabra completa.

10. Busque una cadena en archivos comprimidos con Gzip

Merecen alguna mención los derivados de grep. El primero es zgrep, que, similar a zcat, se usa en archivos comprimidos con gzip. Toma las mismas opciones que grep y se usa de la misma manera:

# zgrep –i error /var/log/syslog.2.gz

11. Coincidir con expresiones regulares en archivos

El egrep es otro derivado que significa "Expresión regular global extendida". Reconoce metacaracteres de expresión adicionales como +? | y().

egrep es muy útil para buscar archivos fuente y otros fragmentos de código, en caso de que surja la necesidad. Se puede invocar desde grep normal especificando la opción –E.

# grep –E

12. Buscar una cadena de patrón fijo

El fgrep busca en un archivo o lista de archivos una cadena de patrón fijo. Es lo mismo que grep –F. Una forma común de usar fgrep es pasarle un archivo de patrones:

# fgrep –f file_full_of_patterns.txt file_to_search.txt

Este es solo un punto de partida con grep, pero como probablemente pueda ver, es invaluable para una variedad de propósitos. Aparte de los comandos simples de una línea que hemos implementado, grep se puede usar para escribir trabajos cron potentes y scripts de shell robustos, para empezar.

Sea creativo, experimente con las opciones en la página de manual y cree expresiones grep que sirvan a sus propios propósitos.