12 Ejemplos Prácticos del Comando Grep de Linux

¿Alguna vez te has enfrentado a la tarea de buscar una cadena o patrón específico en un archivo, pero no tienes idea de por dónde empezar a buscar? Bueno, entonces, ¡aquí está el comando grep para salvarte!

grep es un potente buscador de patrones de archivos que viene equipado en cada distribución de Linux. Si por alguna razón no está instalado en tu sistema, puedes instalarlo fácilmente a través de tu gestor de paquetes como se muestra a continuación.

$ sudo apt install grep         [On Debian, Ubuntu and Mint]
$ sudo yum install grep         [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux]
$ sudo emerge -a sys-apps/grep  [On Gentoo Linux]
$ sudo apk add grep             [On Alpine Linux]
$ sudo pacman -S grep           [On Arch Linux]
$ sudo zypper install grep      [On OpenSUSE]    

I have found that the easiest way to get your feet wet with the grep command is to just dive right in and use some real-world examples.

1. Buscar y encontrar archivos en Linux

Supongamos que acabas de instalar una copia nueva de Ubuntu en tu máquina y que vas a probar a hacer scripts en Python.

Has estado buscando en la web tutoriales, pero ves que hay dos versiones diferentes de Python en uso, y no sabes qué versión de Python está instalada en Ubuntu por el instalador, o si instaló algún módulo.

Simplemente ejecuta el siguiente comando dpkg con grep como se muestra:

dpkg -l | grep -i python
Finding Files with Grep Command

Primero, ejecutamos dpkg –l, que enumera los paquetes *.deb instalados en tu sistema. Segundo, enviamos esa salida a grep -i python, que simplemente indica “ve a grep y filtra y devuelve todo lo que tenga ‘python‘ en él.”

La opción -i está ahí para ignorar el caso, ya que grep distingue entre mayúsculas y minúsculas. Usar la opción -i es un buen hábito a adquirir a menos que, por supuesto, estés tratando de afinar una búsqueda más específica.

2. Buscar y Filtrar Archivos en Linux

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

Estás teniendo algunos problemas con tu Servidor Web Apache, y has recurrido a uno de los muchos foros increíbles en la red pidiendo ayuda.

El alma amable que te responde te ha pedido que publiques el contenido de tu archivo /etc/apache2/apache2.conf. ¿No sería más fácil para ti, el tipo que te ayuda, y para todos los que lo lean si pudieras eliminar todas las líneas comentadas? ¡Bueno, puedes! Solo ejecuta esto:

grep -v ^\# /etc/apache2/apache2.conf | grep .

La opción -v le indica 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 con #.

Ten en cuenta que también usamos grep . al final para ocultar la salida de todas las líneas vacías. De esta manera, solo vemos la configuración en nuestro terminal.

Print Uncommented Lines in Linux

3. Encontrar todos los archivos .mp3 en Linux

El comando grep puede ser muy útil para filtrar desde stdout. Por ejemplo, supongamos que tienes una carpeta completa llena de archivos de música en diferentes formatos.

Deseas encontrar todos los archivos *.mp3 del artista JayZ, pero no quieres ninguna de las pistas remezcladas. Usando un comando find con un par de tuberías grep hará el truco:

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

En este ejemplo, estamos utilizando find para imprimir todos los archivos con la extensión *.mp3, enviándolo a través de grep –i para filtrar y imprimir todos los archivos con el nombre “JayZ“, y luego otra tubería a grep –vi que filtra y no imprime todos los nombres de archivo con la cadena (en cualquier caso) “remix“.

[ También podría interesarte: 35 Ejemplos Prácticos del Comando Linux Find ]

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

Otras opciones son los interruptores -A y -B, que muestran la línea coincidente y un número de líneas que vienen antes o después de la cadena de búsqueda.

Mientras que la página del manual proporciona una explicación más detallada, encuentro más fácil recordar las opciones como -A = después, y -B = antes:

ifconfig | grep -A 4 inet
ifconfig | grep -B 2 UP
Print Number of Lines Before and After String

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

 TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 15314  bytes 1593769 (1.5 MB)
        RX errors 0  dropped 0  overruns 0  frame 0

6. Contar el número de coincidencias

Similar a canalizar una cadena de grep al conteo de palabras (comando wc), la opción integrada de grep puede hacer lo mismo por ti:

# ifconfig | grep -c inet6

7. Buscar archivos por cadena dada en Linux

La opción –n para grep es muy útil al depurar 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. Buscar una cadena recursivamente en todos los directorios

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

# grep -r “function” *

9. Buscar el patrón completo

Pasando la opción -w a grep busca el patrón completo 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"
Find Entire Pattern

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

10. Buscar una cadena en archivos comprimidos

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

# zgrep -i error /var/log/syslog.2.gz
Search String in Gzipped Files

11. Coincidir expresiones regulares en archivos

El comando egrep es otro derivado que significa “Expresión Regular Global Extendida”. Reconoce caracteres meta de expresión adicionales como at + ? | y ().

El comando egrep es muy útil para buscar en archivos fuente y otras piezas de código, si surge la necesidad. Se puede invocar desde el grep regular especificando la opción -E.

grep -E

12. Buscar una cadena de patrón fijo

El comando fgrep busca un archivo o lista de archivos para 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

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

Sé creativo, experimenta con las opciones en la página del man, y desarrolla expresiones grep que sirvan a tus propios propósitos!

Source:
https://www.tecmint.com/12-practical-examples-of-linux-grep-command/