GNU/Linux >> Tutoriales Linux >  >> Linux

Expresiones Regulares en el Comando Grep con 10 Ejemplos – Parte I

Las expresiones regulares se utilizan para buscar y manipular el texto, según los patrones. La mayoría de los comandos y lenguajes de programación de Linux usan expresiones regulares.

El comando Grep se usa para buscar una cadena específica en un archivo. Consulte nuestro artículo anterior para ver 15 ejemplos prácticos de comandos grep.

También puede usar expresiones regulares con el comando grep cuando desee buscar un texto que contenga un patrón en particular. Las expresiones regulares buscan los patrones en cada línea del archivo. Simplifica nuestra operación de búsqueda.

Este artículo es parte de una serie de 2 artículos.

Este artículo de la parte 1 cubre ejemplos de grep para expresiones regulares simples. El futuro artículo de la parte 2 cubrirá ejemplos avanzados de expresiones regulares en grep.

Tomemos el archivo /var/log/messages que se usará en nuestros ejemplos.

Ejemplo 1. Inicio de línea ( ^ )

En el comando grep, el símbolo de intercalación ^ coincide con la expresión al comienzo de una línea. En el siguiente ejemplo, muestra toda la línea que comienza con el 10 de noviembre. Es decir, todos los mensajes registrados el 10 de noviembre.

$ grep "^Nov 10" messages.1
Nov 10 01:12:55 gs123 ntpd[2241]: time reset +0.177479 s
Nov 10 01:17:17 gs123 ntpd[2241]: synchronized to LOCAL(0), stratum 10
Nov 10 01:18:49 gs123 ntpd[2241]: synchronized to 15.1.13.13, stratum 3
Nov 10 13:21:26 gs123 ntpd[2241]: time reset +0.146664 s
Nov 10 13:25:46 gs123 ntpd[2241]: synchronized to LOCAL(0), stratum 10
Nov 10 13:26:27 gs123 ntpd[2241]: synchronized to 15.1.13.13, stratum 3

El ^ coincide con la expresión al principio de una línea, solo si es el primer carácter de una expresión regular. ^N coincide con la línea que comienza con N.

Ejemplo 2. Fin de línea ($)

El carácter $ coincide con la expresión al final de una línea. El siguiente comando lo ayudará a obtener todas las líneas que terminan con la palabra "terminando".

$ grep "terminating.$" messages
Jul 12 17:01:09 cloneme kernel: Kernel log daemon terminating.
Oct 28 06:29:54 cloneme kernel: Kernel log daemon terminating.

A partir de la salida anterior, puede saber cuándo finalizó todo el registro del kernel. Al igual que ^ coincide con el principio de la línea solo si es el primer carácter, $ coincide con el final de la línea solo si es el último carácter de una expresión regular.

Ejemplo 3. Recuento de líneas vacías (^$)

Usando los caracteres ^ y $ puede encontrar las líneas vacías disponibles en un archivo. “^$” especifica una línea vacía.

$ grep -c  "^$" messages anaconda.log
messages:0
anaconda.log:3

Los comandos anteriores muestran el recuento de líneas vacías disponibles en los mensajes y archivos anaconda.log.

Ejemplo 4. Carácter único (.)

El metacarácter especial “.” (punto) coincide con cualquier carácter excepto el carácter de final de línea. Tomemos el archivo de entrada que tiene el contenido de la siguiente manera.

$ cat input
1. first line
2. hi hello
3. hi zello how are you
4. cello
5. aello
6. eello
7. last line

Ahora busquemos una palabra que tenga un solo carácter seguido de ello. es decir, hola, violonchelo, etc.,

$ grep ".ello" input
2. hi hello
3. hi zello how are you
4. cello
5. aello
6. eello

En caso de que desee buscar una palabra que tenga solo 4 caracteres, puede dar grep -w “….” donde un solo punto representa cualquier carácter único.

Ejemplo 5. Cero o más ocurrencias (*)

El carácter especial "*" coincide con cero o más ocurrencias del carácter anterior. Por ejemplo, el patrón '1*' coincide con cero o más '1'.

El siguiente ejemplo busca un patrón "kernel:*", es decir, kernel:y cero o más ocurrencias del carácter de espacio.

$ grep "kernel: *." *
messages.4:Jul 12 17:01:02 cloneme kernel: ACPI: PCI interrupt for device 0000:00:11.0 disabled
messages.4:Oct 28 06:29:49 cloneme kernel: ACPI: PM-Timer IO Port: 0x1008
messages.4:Oct 28 06:31:06 btovm871 kernel:  sda: sda1 sda2 sda3
messages.4:Oct 28 06:31:06 btovm871 kernel: sd 0:0:0:0: Attached scsi disk sda
.
.

En el ejemplo anterior, coincide con el kernel y el símbolo de dos puntos seguido de cualquier número de espacios/sin espacio y “.” coincide con cualquier carácter individual.

Ejemplo 6. Una o más ocurrencias (\+)

El carácter especial “\+” coincide con una o más ocurrencias del carácter anterior. ” \+” coincide con al menos uno o más caracteres de espacio.

Si no hay espacio, entonces no coincidirá. El carácter "+" se incluye en la expresión regular extendida. Así que tienes que escapar cuando quieras usarlo con el comando grep.

$ cat input
hi hello
hi    hello how are you
hihello

$ grep "hi \+hello" input
hi hello
hi    hello how are you

En el ejemplo anterior, el patrón grep coincide con el patrón "hola", seguido de uno o más caracteres de espacio, seguidos de "hola".

Si no hay espacio entre hola y hola, no coincidirá con eso. Sin embargo, el carácter * coincide con cero o más ocurrencias.

"hola" coincidirá con * como se muestra a continuación.

$ grep "hi *hello" input
hi hello
hi    hello how are you
hihello
$

Ejemplo 7. Cero o una aparición (\?)

El carácter especial “?” coincide con cero o una aparición del carácter anterior. “¿0?” coincide con un solo cero o nada.

$ grep "hi \?hello" input
hi hello
hihello

“hola \? hola” coincide con hola y hola con espacio simple (hola hola) y sin espacio (hola hola).

La línea que tiene más de un espacio entre hola y hola no coincidió con el comando anterior.

Ejemplo 8. Escapar del carácter especial (\)

Si desea buscar caracteres especiales (por ejemplo:*, punto) en el contenido, debe escapar del carácter especial en la expresión regular.

$ grep "127\.0\.0\.1"  /var/log/messages.4
Oct 28 06:31:10 btovm871 ntpd[2241]: Listening on interface lo, 127.0.0.1#123 Enabled

Ejemplo 9. Clase de carácter ([0-9])

La clase de caracteres no es más que una lista de caracteres mencionados entre corchetes que se utilizan para hacer coincidir solo uno de varios caracteres.

$ grep -B 1 "[0123456789]\+ times" /var/log/messages.4
Oct 28 06:38:35 btovm871 init: open(/dev/pts/0): No such file or directory
Oct 28 06:38:35 btovm871 last message repeated 2 times
Oct 28 06:38:38 btovm871 pcscd: winscard.c:304:SCardConnect() Reader E-Gate 0 0 Not Found
Oct 28 06:38:38 btovm871 last message repeated 3 times

Los mensajes repetidos se registrarán en el archivo de registro de mensajes como "último mensaje repetido n veces". El ejemplo anterior busca la línea que tiene cualquier número (0 a 9) seguido de la palabra "veces". Si coincide, muestra la línea anterior a la línea coincidente y también la línea coincidente.

Dentro del corchete, usando un guión puede especificar el rango de caracteres. Como [0123456789] se puede representar por [0-9]. El rango de letras también se puede especificar como [a-z], [A-Z], etc. Por lo tanto, el comando anterior también se puede escribir como

$ grep -B 1 "[0-9]\+ times" /var/log/messages.4

Ejemplo 10. Excepción en la clase de caracteres

Si desea buscar todos los caracteres excepto los que están entre corchetes, utilice el símbolo ^ (signo de intercalación) como el primer carácter después del corchete abierto. El siguiente ejemplo busca una línea que no comienza con la letra de la vocal del archivo de palabras del diccionario en Linux.

$ grep -i  "^[^aeiou]" /usr/share/dict/linux.words
1080
10-point
10th
11-point
12-point
16-point
18-point
1st
2

El primer símbolo de intercalación en una expresión regular representa el comienzo de la línea. Sin embargo, el símbolo de intercalación dentro del corchete representa "excepto", es decir, coincide excepto todo lo que está en el corchete.


Linux
  1. Comando wc Linux con ejemplos

  2. Comando Nohup con ejemplos

  3. Comando JQ en Linux con ejemplos

  4. Expresiones Regulares Avanzadas en el Comando Grep con 10 Ejemplos – Parte II

  5. ¿Cómo usa expresiones regulares con el comando cp en Linux?

15 comandos ps de Linux con ejemplos

Usando el comando GREP en Linux con ejemplos

El tutorial de comando Grep con ejemplos para principiantes

Comando de historial con ejemplos

Comando Grep en Linux (con ejemplos)

10 ejemplos prácticos de expresiones regulares con grep