GNU/Linux >> Tutoriales Linux >  >> Linux

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

En nuestro artículo anterior sobre expresiones regulares, parte 1, revisamos las expresiones regulares básicas con ejemplos prácticos.

Pero podemos hacer mucho más con las expresiones regulares. A menudo, puede realizar tareas complejas con una sola expresión regular en lugar de escribir varias líneas de códigos.

Al aplicar una expresión regular a una cadena, el motor de expresiones regulares se iniciará en el primer carácter de la cadena. Intentará todas las permutaciones posibles de la expresión regular en el primer carácter. Solo si se han probado todas las posibilidades y se ha encontrado que fallan, el motor de expresiones regulares continuará con el segundo carácter del texto.

La expresión regular probará todas las permutaciones posibles de la expresión regular, exactamente en el mismo orden. El resultado es que el motor dirigido por expresiones regulares devolverá la coincidencia más a la izquierda.

En este artículo, revisemos algunas expresiones regulares avanzadas con ejemplos.

Ejemplo 1. Operación O (|)

El carácter vertical (|) en grep se usa para especificar que cualquiera de las dos subexpresiones completas ocurren en una posición. “subexpresión1|subexpresión2” coincide con subexpresión1 o subexpresión2.

El siguiente ejemplo eliminará tres tipos diferentes de líneas de comentarios en un archivo usando OR en un comando grep.

Primero, cree un archivo de muestra llamado "comentarios".

$ cat comments
This file shows the comment character in various programming/scripting languages
### Perl / shell scripting
If the Line starts with single hash symbol,
then its a comment in Perl and shell scripting.
' VB Scripting comment
The line should start with a single quote to comment in VB scripting.
// C programming single line comment.
Double slashes in the beginning of the line for single line comment in C.

El archivo llamado "comentarios" tiene perl, VB script y líneas de comentarios de programación C. Ahora, el siguiente comando grep busca la línea que no comienza con # ni con comillas simples (') ni con doble barra inclinada (//).

$ grep  -v "^#\|^'\|^\/\/" comments
This file shows the comment character in various programming/scripting languages
If the Line starts with single hash symbol,
then its a comment in Perl and shell scripting.
The line should start with a single quote to comment in VB scripting.
Double slashes in the beginning of the line for single line comment in C.

Ejemplo 2. Expresión de clase de caracteres

Como hemos visto en nuestro anterior artículo de expresiones regulares, ejemplo 9, la lista de caracteres se puede mencionar entre corchetes para que coincida solo con uno de varios caracteres. El comando Grep admite algunas clases de caracteres especiales que denotan ciertos rangos comunes. Algunos de ellos se enumeran aquí. Consulte la página del manual de grep para conocer varias expresiones de clases de caracteres.

[:digit:] 	Only the digits 0 to 9
[:alnum:] 	Any alphanumeric character 0 to 9 OR A to Z or a to z.
[:alpha:] 	Any alpha character A to Z or a to z.
[:blank:] 	Space and TAB characters only.

Estos siempre se usan entre corchetes en la forma [[:digit:]]. Ahora vamos a agrupar todos los ID de proceso del proceso del demonio ntpd utilizando la expresión de clase de caracteres adecuada.

$ grep -e "ntpd\[[[:digit:]]\+\]" /var/log/messages.4
Oct 28 11:42:20 gstuff1 ntpd[2241]: synchronized to LOCAL(0), stratum 10
Oct 28 11:42:20 gstuff1 ntpd[2241]: synchronized to 15.11.13.123, stratum 3
Oct 28 12:33:31 gstuff1 ntpd[2241]: synchronized to LOCAL(0), stratum 10
Oct 28 12:50:46 gstuff1 ntpd[2241]: synchronized to 15.11.13.123, stratum 3
Oct 29 07:55:29 gstuff1 ntpd[2241]: time reset -0.180737 s

Ejemplo 3. Ocurrencias de M a N ({m,n})

Una expresión regular seguida de {m,n} indica que el elemento anterior coincide al menos m veces, pero no más de n veces. Los valores de m y n deben ser no negativos y menores que 255.

El siguiente ejemplo imprime la línea si está en el rango de 0 a 99999.

$ cat  number
12
12345
123456
19816282

$ grep  "^[0-9]\{1,5\}$" number
12
12345

El archivo llamado "número" tiene la lista de números, el comando grep anterior coincide solo con el número que va de 1 (el mínimo es 0) a 5 dígitos (el máximo 99999).

Nota :Para ver ejemplos básicos de comandos grep, lea 15 ejemplos prácticos de comandos Grep.

Ejemplo 4. Ocurrencia M exacta ({m})

Una expresión regular seguida de {m} coincide exactamente con m ocurrencias de la expresión anterior. El siguiente comando grep mostrará solo el número que tiene 5 dígitos.

$ grep  "^[0-9]\{5\}$" number
12345

Ejemplo 5. M o más ocurrencias ({m,})

Una expresión regular seguida de {m,} coincide con m o más ocurrencias de la expresión anterior. El siguiente comando grep mostrará el número que tiene 5 o más dígitos.

$ grep "[0-9]\{5,\}" number
12345
123456
19816282

Nota :¿Sabía que puede usar el comando bzgrep para buscar una cadena o un patrón (expresión regular) en archivos comprimidos con bzip2?

Ejemplo 6. Límite de palabra (\b)

\b es para coincidir con un límite de palabra. \b coincide con cualquier carácter al principio (\bxx) y/o al final (xx\b) de una palabra, por lo que \bthe\b encontrará el pero no el, pero \bthe los encontrará.

# grep -i "\bthe\b" comments
This file shows the comment character in various programming/scripting languages
If the Line starts with single hash symbol,
The line should start with a single quote to comment in VB scripting.
Double slashes in the beginning of the line for single line comment in C.

Ejemplo 7. Referencias anteriores (\n)

La agrupación de expresiones para su uso posterior está disponible en grep a través de referencias anteriores. Por ejemplo, \([0-9]\)\1 coincide con un número de dos dígitos en el que ambos dígitos son el mismo número, como 11,22,33, etc.,

# grep -e '^\(abc\)\1$'
abc
abcabc
abcabc

En el comando grep anterior, acepta la entrada STDIN. cuando lee la entrada "abc" no coincide, la línea "abcabc" coincide con la expresión dada, por lo que se imprime. Si desea usar la expresión regular extendida, siempre es preferible usar el comando egrep. grep con la opción -e también funciona como egrep, pero debe escapar de los caracteres especiales como paréntesis.

Nota :También puede usar el comando zgrep para buscar dentro de un archivo gz comprimido.

Ejemplo 8. Haga coincidir el patrón "Orientado a objetos"

Hasta ahora hemos visto diferentes consejos en el comando grep. Ahora, usando esos consejos, hagamos coincidir "orientado a objetos" en varios formatos.

$ grep "OO\|\([oO]bject\( \|\-\)[oO]riented\)"

El comando grep anterior coincide con "OO", "orientado a objetos", "orientado a objetos" y etc.,

Ejemplo 9. Imprime la línea “vocal singlecharacter samevocal”

El siguiente comando grep imprime todas las líneas que contienen una vocal (a, e, i, o o u) seguida de un solo carácter seguido de la misma vocal nuevamente. Así, encontrará a eva o adam pero no a vera.

$ cat input
evening
adam
vera

$ grep "\([aeiou]\).\1" input
evening
adam

Ejemplo 10. Dirección IP válida

El siguiente comando grep solo coincide con una dirección IP válida.

$ cat input
15.12.141.121
255.255.255
255.255.255.255
256.125.124.124

$ egrep  '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' input
15.12.141.121
255.255.255.255

En la expresión regular dada arriba, hay diferentes condiciones. Estas coincidencias condicionadas deben ocurrir tres veces y se menciona una clase más por separado.

  1. Si comienza con 25, el siguiente número debe ser 0 a 5 (250 a 255)
  2. Si comienza con 2, el siguiente número podría ser 0-4 seguido de 0-9 (200 a 249)
  3. cero ocurrencia de 0 o 1, 0-9, luego cero ocurrencia de cualquier número entre 0-9 (0 a 199)
  4. Luego carácter de punto

Para la primera parte de este artículo, lea Expresiones regulares en el comando Grep con 10 ejemplos - Parte I


Linux
  1. Comando wc Linux con ejemplos

  2. Comando Nohup con ejemplos

  3. Comando JQ en Linux con ejemplos

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

  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