10 ejemplos de uso del comando grep en Linux para buscar archivos y contenido

La búsqueda de archivos y contenido en Windows tiene sus encantos, pero cuando necesito encontrar archivos o su contenido, o buscar información específica del sistema, el comando "grep" en Linux nunca deja de sorprenderme por su poder y versatilidad.

Existen varias versiones de grep; grep regular, egrep (grep extendido) y fgrep (grep fijo). Los dos últimos tienen diferentes métodos para trabajar con caracteres y cadenas de búsqueda. Me centraré en el grep regular para este artículo, que pretende ser un tutorial básico para este útil y confiable comando.

La sintaxis de grep es la siguiente:

grep [opciones] patrón [archivos]

Las opciones y patrones que puedes usar con grep son variados y diversos. Aquí hay 10 ejemplos para ayudarte a mejorar tus habilidades con este comando.

Índice de Contenido
  1. 1. Buscar una palabra específica en un archivo
  2. 2. Buscar múltiples palabras en un archivo
  3. 3. Obtener el número de coincidencias
  4. 4. Mostrar los números de línea de cada coincidencia
  5. 5. Mostrar solo un número específico de coincidencias
  6. 6. Mostrar todas las entradas que NO coinciden
  7. 7. Buscar en varios archivos
  8. 8. Mostrar solo los nombres de archivo que coinciden con la búsqueda
  9. 9. Buscar mensajes registrados por fecha
  10. 10. Usar grep con otros comandos

1. Buscar una palabra específica en un archivo

Este es realmente uno de los usos más básicos de grep. Digamos que quiero inspeccionar el contenido del archivo /var/log/secure en busca de cualquier instancia de la palabra "failure". Tendría que escribir:

Cómo utilizar Isearch para buscar archivos de texto en Linux

grep failure /var/log/secure

Este es un ejemplo de lo que grep podría devolver:

Apr 4 06:45:29 smatteso-vm1 sshd[14836]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost= qualys-corp.testdomain.com user=8boa5lv2rn8pso8
Apr 4 06:45:31 smatteso-vm1 sshd[14844]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost= qualys-corp.testdomain.com user=13hr26mnm8wo4k

Agrega el interruptor -i (por ejemplo, grep -i) para realizar una búsqueda que no distinga entre mayúsculas y minúsculas. En el ejemplo anterior, esto devolvería tanto "failure" en minúsculas como "FAILURE" en mayúsculas o cualquier combinación de ambos, como "Failure".

2. Buscar múltiples palabras en un archivo

Este comando te permite buscar múltiples palabras en un archivo. Observa el uso de comillas simples, la barra invertida y el comando pipe entre ellas:

grep 'opened\|closed' /var/log/secure

Guía para entender y gestionar los permisos de archivos y directorios en Linux

Esto es lo que grep podría devolver:

Apr 2 03:45:07 smatteso-vm1 sshd[16278]: Connection closed by 10.1.7.101

Apr 2 03:46:42 smatteso-vm1 su: pam_unix(su-l:session): session opened for user phxinst1 by (uid=0)

Apr 2 03:46:45 smatteso-vm1 su: pam_unix(su-l:session): session closed for user phxinst1

Apr 2 03:46:45 smatteso-vm1 su: pam_unix(su-l:session): session opened for user phxinst1 by (uid=0)

3. Obtener el número de coincidencias

Puede que no quieras ver la salida del comando grep, sino que solo te diga cuántas coincidencias encontró tu búsqueda. Esto se realiza usando el interruptor -c (count):

Cómo configurar un servidor Linux como puerta de enlace para una red local

grep failure /var/log/secure -c

Grep devolverá un número como este:

12

Puedes hacer algunas cosas inteligentes con este interruptor. Por ejemplo, si quieres saber cuántos procesadores hay en tu sistema, puedes escribir:

grep -c processor /proc/cpuinfo

4. Mostrar los números de línea de cada coincidencia

Puede ser útil saber en qué número de línea aparecen los resultados de tu búsqueda. Para hacerlo, agrega el interruptor -n (number):

Windows al alcance de Linux: Accede a recursos con smbmount y smbclient

grep -n failure /var/log/secure

Grep luego devolvería algo así:

1601:Apr 4 06:45:29 smatteso-vm1 sshd[14836]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost= qualys-corp.testdomain.com user=8boa5lv2rn8pso8

1612:Apr 4 06:45:31 smatteso-vm1 sshd[14844]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost= qualys-corp.testdomain.com user=13hr26mnm8wo4k

5. Mostrar solo un número específico de coincidencias

Supongamos que solo quiero ver los primeros cinco resultados de búsqueda. Puedo acotarlos usando el interruptor -m (recuento máximo):

grep -m5 failure /var/log/secure

Cómo configurar y utilizar logrotate para la gestión de archivos de registro en Linux

Aquí tienes un ejemplo de los resultados:

Apr 4 06:45:29 smatteso-vm1 sshd[14836]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost= qualys-corp.testdomain.com user=8boa5lv2rn8pso8
Apr 4 06:45:31 smatteso-vm1 sshd[14844]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost= qualys-corp.testdomain.com
user=13hr26mnm8wo4k

Nota que no puede haber un espacio entre "-m" y el valor máximo de recuento.

6. Mostrar todas las entradas que NO coinciden

En algunos casos, puedes querer hacer una búsqueda inversa y mostrar los resultados que NO coinciden con tu entrada. Solo agrega el interruptor -v aquí. Por ejemplo, para ver las entradas en el archivo /var/log/secure que no representen la palabra "failure", escribe:

grep -v failure /var/log/secure

Y luego obtendrías resultados como estos:

Cómo instalar y configurar ALSA en Linux: Guía paso a paso

Apr 2 03:45:07 smatteso-vm1 sshd[16278]: Connection closed by 10.1.7.101

Apr 2 03:46:42 smatteso-vm1 su: pam_unix(su-l:session): session opened for user phxinst1 by (uid=0)

Apr 2 03:46:45 smatteso-vm1 su: pam_unix(su-l:session): session closed for user phxinst1

Apr 2 03:46:45 smatteso-vm1 su: pam_unix(su-l:session): session opened for user phxinst1 by (uid=0)

Por supuesto, puedes combinar cadenas, como -v y -n:

grep -v -n failure /var/log/secure

Consejos rápidos para la navegación de directorios en Linux: cd y pushd

Lo cual te mostraría todas las entradas que no coinciden con su número de línea asociado:

1:Apr 2 03:45:07 smatteso-vm1 sshd[16278]: Connection closed by 10.1.7.101

2:Apr 2 03:46:42 smatteso-vm1 su: pam_unix(su-l:session): session opened for user phxinst1 by (uid=0)

3:Apr 2 03:46:45 smatteso-vm1 su: pam_unix(su-l:session): session closed for user phxinst1

4:Apr 2 03:46:45 smatteso-vm1 su: pam_unix(su-l:session): session opened for user phxinst1 by (uid=0)

5:Apr 2 03:46:48 smatteso-vm1 su: pam_unix(su-l:session): session closed for user phxinst1

Cómo configurar y optimizar el enrutamiento estático en Linux

7. Buscar en varios archivos

Grep puede hacer mucho más que solo buscar el contenido de un archivo específico. Puedes usar lo que se conoce como búsqueda recursiva para abarcar directorios enteros, subdirectorios o todo el sistema de archivos, y obtener resultados que muestren cada nombre de archivo que contiene tu valor de búsqueda.

Esto se logra usando el interruptor -r, que usaré para buscar mi nombre de cuenta de usuario en el directorio /etc:

grep -r "smatteso" /etc

Aquí tienes un ejemplo de los resultados:

/etc/hosts:10.1.52.237 smatteso-vm1.dwi.testdomain.com smatteso-vm1

/etc/sysconfig/network-scripts/ifcfg-eth0:HOSTNAME="smatteso-vm1"

Cómo utilizar select() y poll() para multiplexar sockets de red

/etc/sysconfig/rhn/systemid:<value><string>smatteso-vm1.dwi.testdomain.com</string></value>

/etc/sysconfig/network:HOSTNAME=smatteso-vm1

Puedes buscar en todo el sistema de archivos cambiando ese "/etc" a "/":

grep -r "smatteso" /

(ten en cuenta que esto puede ser una operación que consume mucho tiempo).

8. Mostrar solo los nombres de archivo que coinciden con la búsqueda

No me gusta el desorden, así que para obtener solo la lista de nombres de archivo que coinciden con mi búsqueda (y no el contenido de los archivos en sí), puedo agregar el interruptor -l:

Cómo convertir una caja de Linux en un router OSPF y BGP

grep -rl "smatteso" /etc

Esto devolvería resultados como estos:

/etc/hosts

/etc/sysconfig/network-scripts/ifcfg-eth0

/etc/sysconfig/rhn/systemid

/etc/sysconfig/network

Como se discutió anteriormente, puedes invertir esto para mostrar los nombres de archivo que no contienen el término de búsqueda, usando el interruptor -L en lugar de -l:

grep -rL "smatteso" /etc

9. Buscar mensajes registrados por fecha

Un elemento especialmente útil al usar grep es buscar a través de archivos de registro en busca de mensajes que se registraron en una fecha determinada. Digamos que quiero ver todo lo registrado el 5 de abril:

grep "Apr 5" /var/log/messages

Obtendría resultados como estos:

Apr 5 00:00:01 smatteso-vm1 audispd: node=smatteso-vm1 type=USER_ACCT msg=audit(1491364801.741:135867): user pid=50149 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:accounting acct="phxinst1" exe="/usr

/sbin/crond" hostname=? addr=? terminal=cron res=success'

Apr 5 00:00:01 smatteso-vm1 audispd: node=smatteso-vm1 type=USER_ACCT msg=audit(1491364801.741:135866): user pid=50143 uid=0 auid=4294967295 ses=4294967295

Esto también funciona para un periodo de tiempo específico si lo agregas, por supuesto. Para ver solo los mensajes registrados a las 6 a.m., puedo agregar "06:00" al comando:

grep "Apr 5 06:00" /var/log/messages

Apr 5 06:00:01 smatteso-vm1 audispd: node=smatteso-vm1 type=USER_ACCT msg=audit(1491386401.774:143444): user pid=33946 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:accounting acct="phxinst1" exe="/usr/sbin/crond" hostname=? addr=? terminal=cron res=success'

Apr 5 06:00:01 smatteso-vm1 audispd: node=smatteso-vm1 type=USER_ACCT msg=audit(1491386401.774:143445): user pid=33945 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:accounting acct="phxinst1" exe="/usr/sbin/crond" hostname=? addr=? terminal=cron res=success'

10. Usar grep con otros comandos

Grep se puede usar con cualquier otro comando que desees. Digamos que quiero encontrar cualquier archivo de registro que contenga la palabra "spice". Puedo usar el comando "find" y redireccionar los resultados a grep de la siguiente manera:

find . -name "*.log" | grep -i spice

Esto es un ejemplo de los resultados:

./spice-vdagent.log

El archivo de historial, que contiene una lista de comandos escritos recientemente, es uno de los mejores elementos de Linux. También es posible buscar en el archivo de historial términos específicos (por ejemplo, "pam_tally2") para ver cuándo se usaron por última vez y cuál es la sintaxis adecuada:

history | grep pam_tally2

324 2017-04-06 13:50:25 pam_tally2

325 2017-04-06 13:50:29 pam_tally2 -u smatteso -r

350 2017-04-06 14:05:44 history | grep pam_tally2

Puedes usar grep con "netstat" para ver los puertos en escucha, por ejemplo, el puerto 22:

netstat -anp | grep 22

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2154/sshd

tcp 0 0 10.1.52.237:22 10.1.13.63:51704 ESTABLISHED 40441/sshd

tcp 0 32 10.1.52.237:22 10.1.13.63:51701 ESTABLISHED 40434/sshd

tcp 0 0 :::22 :::* LISTEN 2154/sshd

ps -aux | grep spice

root 2179 0.0 0.0 15900 1076 ? Ss Mar31 0:00 /usr/sbin/spice-vdagentd

root 2855 0.0 0.0 103328 888 pts/0 S+ 12:41 0:00 grep spice

gdm 5430 0.0 0.0 34488 1604 ? Ss Mar31 0:00 /usr/bin/spice-vdagent

Esto es solo la punta básica del iceberg que representa las capacidades de grep. En un artículo posterior, discutiré algunos métodos más avanzados para usar el comando y obtener resultados aún más útiles y detallados.

Para obtener más información sobre grep, usa el comando "man grep" o "grep --help". También puedes descargar una versión de grep para Windows.

También te puede interesar

  • Cómo liberar espacio en disco en sistemas Linux
  • Cómo redimensionar una partición virtual de Red Hat Enterprise Linux
  • Cómo agregar control de versiones al directorio /etc en Linux
  • Cómo usar una ramdisk en Linux

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Código abierto, allí encontraras muchos artículos similares a 10 ejemplos de uso del comando grep en Linux para buscar archivos y contenido , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.