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.
- Si comienza con 25, el siguiente número debe ser 0 a 5 (250 a 255)
- Si comienza con 2, el siguiente número podría ser 0-4 seguido de 0-9 (200 a 249)
- cero ocurrencia de 0 o 1, 0-9, luego cero ocurrencia de cualquier número entre 0-9 (0 a 199)
- 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