Búsqueda de sitios web

Cómo utilizar el comando Grep en Linux [12 ejemplos útiles]


¿Alguna vez se ha enfrentado a la tarea de buscar una cadena o patrón en particular en un archivo y no tiene idea de por dónde empezar a buscar? Pues bien, ¡aquí está el comando 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 como se muestra.

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]    

Descubrí que la forma más fácil de empezar a utilizar el comando grep es simplemente sumergirse y utilizar algunos ejemplos del mundo real.

1. Buscar y encontrar archivos en Linux

Digamos que acaba de instalar una copia nueva del nuevo Ubuntu en su máquina y que va a darle una oportunidad a las secuencias de comandos Python.

Ha estado buscando tutoriales en la web, pero ve que hay dos versiones diferentes de Python en uso y no sabe qué versión de Python instala el instalador en Ubuntu, o si instaló algún módulo.

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

dpkg -l | grep -i python

Primero, ejecutamos dpkg –l, que enumera los paquetes *.deb instalados en su sistema. En segundo lugar, canalizamos esa salida a grep -i python, que simplemente dice "vaya a grep, filtre y devuelva 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 a menos que, por supuesto, estés intentando concretar 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 en varios archivos. Tomemos este escenario:

Estás teniendo problemas con tu servidor web Apache y te has comunicado con uno de los muchos foros fantásticos de la red para pedir ayuda.

El alma amable que le responde le ha pedido que publique el contenido de su archivo /etc/apache2/apache2.conf. ¿No sería más fácil para ti, para la persona que te ayuda y para todos los que lo leen si pudieras eliminar todas las líneas comentadas? ¡Bien tu puedes! Simplemente ejecuta esto:

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

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 #.

Tenga en cuenta que también usamos grep . al final para ocultar la salida de todas las líneas vacías. De esta forma sólo vemos los ajustes de configuración en nuestro terminal.

3. Encuentre todos los archivos .mp3 en Linux

El grep puede resultar muy útil para filtrar desde stdout. Por ejemplo, digamos 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 será suficiente:

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

En este ejemplo, usamos find para imprimir todos los archivos con una extensión *.mp3 y los canalizamos a grep –i para filtrar. salga e imprima todos los archivos con el nombre “JayZ” y luego otra tubería a grep –vi que filtra y no imprime todos los nombres de archivos con la cadena (en cualquier caso) “remezclar”.

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

Otro par de opciones son los interruptores -A y -B, que muestran la línea coincidente y una cantidad 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=después y -B=< fuerte>antes:

ifconfig | grep -A 4 inet
ifconfig | grep -B 2 UP

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

La opción -C del 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. Cuente el número de coincidencias

De manera similar a canalizar una cadena grep al recuento de palabras (comando wc), la opción incorporada de grep puede realizar lo mismo por usted:

ifconfig | grep -c inet6

7. Buscar archivos por cadena determinada 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. 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. Busque el patrón completo

Al pasar la opción -w a grep se 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"

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 utiliza en archivos gzip. Toma las mismas opciones que grep y se usa de la misma manera:

zgrep -i error /var/log/syslog.2.gz

11. Hacer coincidir expresiones regulares en archivos

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

El comando 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 el grep normal especificando la opción -E.

grep -E

12. Buscar una cadena de patrón fijo

El comando 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 sólo un punto de partida con grep, pero como probablemente puedas ver, es invaluable para una variedad de propósitos. Aparte de los simples comandos de una línea que hemos implementado, grep se puede utilizar para escribir potentes trabajos cron y scripts de shell robustos, para una comenzar.

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