Tutoriales

16 ejemplos de comandos grep para ayudarte en el mundo real

Grep se desarrolló originalmente para sistemas basados ​​en Unix y es una de las utilidades de línea de comandos más utilizadas para máquinas Linux.

Su nombre proviene de otro comando similar en la herramienta ed, a saber, g/re/p, que significa GRAMObusqueda local Respuestaexpresiones regulares y pagsrint coincide con la línea. grep básicamente busca un patrón dado o una expresión regular desde la entrada estándar o un archivo, e imprime líneas que coinciden con los criterios dados. A menudo se usa para filtrar detalles innecesarios mientras se imprime solo la información requerida de un archivo de registro grande.

El poder de las expresiones regulares combinado con las opciones admitidas en grep lo hace posible.

Aquí, presentaremos algunos comandos grep comúnmente utilizados por administradores de sistemas o desarrolladores en diferentes escenarios.

Así que empecemos… 👨‍💻

sintaxis del comando grep

Si no usa tuberías, el comando grep requiere un patrón y argumentos opcionales y una lista de archivos.

$ grep [options] pattern [files]

Un ejemplo sencillo es:

$ grep my file.txt
my_file
$

Buscar varios archivos

grep le permite buscar un patrón determinado no solo en un archivo, sino en varios archivos.Aquí se explica cómo encontrar patrones en varios archivos usando * Comodín.

$ sudo grep -i err /var/log/messages*

producción:

$ sudo grep err /var/log/messages*
/var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: Using IOAPIC for interrupt routing
/var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKA] (IRQs 5 9 10 *11)
/var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKB] (IRQs 5 9 *10 11)
/var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKC] (IRQs 5 *9 10 11)
/var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKD] (IRQs 5 9 10 *11)
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: Using IOAPIC for interrupt routing
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKA] (IRQs 5 9 10 *11)
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKB] (IRQs 5 9 *10 11)
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKC] (IRQs 5 *9 10 11)
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKD] (IRQs 5 9 10 *11)
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: BERT: Boot Error Record Table support is disabled. Enable it by using bert_enable as kernel parameter.
/var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKA] (IRQs 5 9 10 *11)
/var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKB] (IRQs 5 9 *10 11)
/var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKC] (IRQs 5 *9 10 11)
/var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKD] (IRQs 5 9 10 *11)
/var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: BERT: Boot Error Record Table support is disabled. Enable it by using bert_enable as kernel parameter.
/var/log/messages-20201227:Dec 27 19:11:21 centos7vm kernel: [drm:vmw_host_log [vmwgfx]] *ERROR* Failed to send host log message.
/var/log/messages-20201227:Dec 27 19:11:21 centos7vm kernel: [drm:vmw_host_log [vmwgfx]] *ERROR* Failed to send host log message.
$

Puede observar en el resultado anterior que el nombre del archivo se imprime antes de la línea correspondiente para indicar dónde grep Encuentra el patrón dado.

Búsqueda insensible a mayúsculas y minúsculas

grep proporciona un patrón de búsqueda sin mirar el caso del patrón.usar -i La bandera le dice a grep que ignore el caso.

$ grep -i [pattern] [file]

producción:

$ grep -i it text_file.txt
This is a sample text file. It contains
functionality. You can always use grep with any
kind of data but it works best with text data.
It supports numbers like 1, 2, 3 etc. as well as
This is a sample text file. It's repeated two times.
$

Búsqueda de palabras completas

No siempre queremos una coincidencia parcial, queremos que grep solo coincida con una palabra completa.tu puedes hacer -w bandera.

$ grep -w [pattern] [file]

producción:

$ grep -w is text_file.txt
This is a sample text file. It contains
This is a sample text file. It's repeated two times.
$

Comprobar el recuento de coincidencias

A veces solo necesitamos el recuento de coincidencias exitosas realizadas por grep, no las líneas coincidentes reales.nosotros podemos usar -c opciones

$ grep -c [pattern] [file]

producción:

$ grep -c is text_file.txt
2
$

Subdirectorios de búsqueda

A menudo es necesario buscar archivos no solo en el directorio de trabajo actual, sino también en subdirectorios. grep te permite hacer esto fácilmente -r bandera.

$ grep -r [pattern] *

producción:

$ grep -r Hello *
dir1/file1.txt:Hello One
dir1/file2.txt:Hello Two
dir1/file3.txt:Hello Three
$

Como puede ver, grep pasa por cada subdirectorio en el directorio actual y enumera los archivos y las líneas donde se encontró una coincidencia.

búsqueda inversa

Si desea encontrar cosas que no coincidan con un patrón dado, grep lo permite -v bandera.

$ grep -v [pattern] [file]

producción:

$ grep This text_file.txt
This is a sample text file. It contains
This is a sample text file. It's repeated two times.
$ grep -v This text_file.txt
several lines to be used as part of testing grep
functionality. You can always use grep with any
kind of data but it works best with text data.
It supports numbers like 1, 2, 3 etc. as well as
alphabets and special characters like - + * # etc.
$

salida que puede comparar grep Comandos con y sin el mismo esquema y archivo -v bandera.y -vse imprimirá la línea que no coincida con el patrón.

número de línea de impresión

grep le permite imprimir el número de línea junto con la línea impresa, lo que facilita saber en qué parte del archivo se encuentra la línea.usar -n opciones como se muestra para obtener números de línea en la salida.

$ grep -n [pattern] [file]

producción:

$ grep -n This text_file.txt
1:This is a sample text file. It contains
7:This is a sample text file. It's repeated two times.
$

Limitar la salida de grep

Para archivos grandes como registros, la salida de grep puede ser muy larga y es posible que solo necesite una cantidad fija de líneas en la salida en lugar de hacer coincidir todo. Nosotros podemos usar –m[num] Limite las líneas de impresión a num. He aquí cómo usarlo:

$ grep -m[num] [pattern] [file]

Preste atención a cómo usar -m En el siguiente ejemplo, las banderas afectan la salida de grep para el mismo conjunto de condiciones:

$ grep It text_file.txt
This is a sample text file. It contains
It supports numbers like 1, 2, 3 etc. as well as
This is a sample text file. It's repeated two times.
$ grep -m2 It text_file.txt
This is a sample text file. It contains
It supports numbers like 1, 2, 3 etc. as well as
$

mostrar líneas adicionales

A menudo, no solo necesitamos líneas con patrones coincidentes, sino también algunas líneas por encima o por debajo para un mejor contexto.

Puede usar grep para imprimir una línea arriba o abajo (o ambas) de la línea con el patrón usando -A, -B o -C logotipo con num valor.aquí num Indica el número de líneas adicionales a imprimir, justo encima o debajo de la línea correspondiente. Esto se aplica a todas las coincidencias que encuentre grep en el archivo o lista de archivos especificados.

$ grep -A[num] [pattern] [file]

o

$ grep -B[num] [pattern] [file]

o

$ grep -C[num] [pattern] [file]

La salida a continuación muestra la salida grep normal, así como la salida con banderas -A, -B y -C uno a uno. Observe cómo grep interpreta las banderas y sus valores y los cambios en la salida correspondiente.y -A1 flag, grep imprime 1 línea después de la línea coincidente.

Así mismo, con -B1 bandera, que imprime 1 línea antes de la línea coincidente.y -C1 flag, que imprime 1 línea antes y después de la línea coincidente.

$ grep numbers text_file.txt
It supports numbers like 1, 2, 3 etc. as well as
$ grep -A1 numbers text_file.txt
It supports numbers like 1, 2, 3 etc. as well as
alphabets and special characters like - + * # etc.
$ grep -B1 numbers text_file.txt
kind of data but it works best with text data.
It supports numbers like 1, 2, 3 etc. as well as
$ grep -C1 numbers text_file.txt
kind of data but it works best with text data.
It supports numbers like 1, 2, 3 etc. as well as
alphabets and special characters like - + * # etc.
$

lista de nombres de archivos

Para imprimir solo los nombres de los archivos donde se encontró el patrón en lugar de las líneas coincidentes reales, use -l bandera.

$ grep -l [pattern] [file]

Aquí hay un ejemplo de ejecución:

$ grep -l su *.txt
file.txt
text_file.txt
$

imprimir líneas exactas

A veces necesitamos imprimir la línea que coincide exactamente con un patrón dado, no parte de él. grep permite -x logotipo para hacer esto.

$ grep -x [pattern] [file]

En el ejemplo a continuación, file.txt contiene solo una línea con la palabra «soporte» y, por lo tanto, coincide con grep -x marcado, ignorando las líneas que pueden contener la palabra «soporte», así como otro texto.

$ grep -x support *.txt
file.txt:support
$ 

cadena inicial de coincidencia

Usando expresiones regulares, podemos encontrar una cadena al comienzo de una línea. Aquí está cómo hacerlo.

$ grep [options] "^[string]" [file]

ejemplo:

$ grep It text_file.txt
This is a sample text file. It contains
It supports numbers like 1, 2, 3 etc. as well as
This is a sample text file. It's repeated two times.
$ grep ^It text_file.txt
It supports numbers like 1, 2, 3 etc. as well as
$

Observa cómo usar ^ Los caracteres cambian la salida. ^ Indica el comienzo de la cadena y coincide con grep ^It cualquier línea que comience con una palabra ItSurrounding entre comillas ayuda cuando el patrón contiene espacios, etc.

coincidir con la cadena final

Otra expresión regular común y útil es hacer coincidir el final de un patrón de línea.

$ grep [options] "[string]$" [file]

ejemplo:

$ grep "\." text_file.txt
This is a sample text file. It contains
functionality. You can always use grep with any
kind of data but it works best with text data.
It supports numbers like 1, 2, 3 etc. as well as
alphabets and special characters like - + * # etc.
This is a sample text file. It's repeated two times.
$ grep "\.$" text_file.txt
kind of data but it works best with text data.
alphabets and special characters like - + * # etc.
This is a sample text file. It's repeated two times.
$

estamos tratando de hacer coincidir un . carácter al final de la línea.Dado que el punto (.) es un carácter con un significado especial, necesitamos usar \ Características.Observe nuevamente cómo cambia la salida cuando hacemos coincidir . carácter y cuando usamos $ instruir a grep para que solo coincida . (no aquellos que podrían incluirlo en cualquier punto intermedio).

Trabajar con archivos de esquema

En algunos casos, puede tener una lista de patrones complejos que usa con frecuencia. Puede especificar una lista de patrones en un archivo y usar con -f bandera. El archivo debe contener un patrón por línea.

$ grep -f [pattern_file] [file_to_match]

En nuestro ejemplo creamos el nombre de archivo de esquema pattern.txt El contenido es el siguiente:

$ cat pattern.txt
This
It
$

Para usarlo, usa -f bandera.

$ grep -f pattern.txt text_file.txt
This is a sample text file. It contains
It supports numbers like 1, 2, 3 etc. as well as
This is a sample text file. It's repeated two times.
$

Especificar múltiples modos

grep permite especificar múltiples patrones usando -e bandera.

$ grep -e [pattern1] -e [pattern2] -e [pattern3]...[file]

ejemplo:

$ grep -e is -e It -e to text_file.txt
This is a sample text file. It contains
several lines to be used as part of testing grep
It supports numbers like 1, 2, 3 etc. as well as
This is a sample text file. It's repeated two times.
$

Especificar una expresión regular extendida

grep también admite expresiones regulares extendidas o uso de ERE -E bandera.Esto es similar a egrep Comandos en Linux.

El uso de ERE tiene ventajas cuando desea manejar los metacaracteres tal cual y no desea reemplazarlos con cadenas como grep. Esto le brinda más flexibilidad para escapar de ellos, como debemos hacer en el caso de grep.Habiendo dicho eso, usa -E es equivalente a grep egrep Pedido.

$ grep -E '[Extended RegEx]' [file]

Este es un uso de ERE donde queremos imprimir líneas sin comentar o en blanco. Esto es especialmente útil para encontrar cosas en archivos de configuración grandes.también usé -v marcar para no imprimir líneas que coincidan con un patrón '^(#|$)'.

$ sudo grep -vE '^(#|$)' /etc/ssh/sshd_config
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
AuthorizedKeysFile      .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem       sftp    /usr/libexec/openssh/sftp-server
$

en conclusión

El ejemplo anterior es solo la punta del iceberg. grep admite una variedad de opciones y puede ser una herramienta muy útil para cualquier persona que sepa cómo usarla de manera efectiva. No solo podemos usar los ejemplos anteriores, sino que podemos combinarlos de diferentes maneras para obtener lo que necesitamos.

Consulte su página man para obtener más información.

$ man grep

A continuación, estudie el ejemplo del comando SFTP.

LEER  ¿Cómo funciona el escaneo de puertos? Explicación del escaneo de puertos TCP y UDP

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba