1.13. El lenguaje de procesado de archivos GAWK
1.13.4. Expresiones regulares (en inglés, regexps)
Dado que gawk
es un lenguaje especializado en el procesamiento de archivos de texto basado en patrones, es esencial volver a presentar una sección sobre expresiones regulares. Una nueva presentación siempre ayuda a fijar los temas a estudiar.
Una expresión regular (regex o regexp) define uno o varios conjuntos de cadenas de caracteres utilizando una notación específica:
- Una cadena literal de caracteres es una regex que define una sola cadena: a sí misma.
- Una expresión regular más compleja:
- Caracteres ordinarios usados en regexe: _,
A-Z, a-z, 0-9
- Metacaracteres usados en regexe:
.*[ ]^${ }+?|( )
- Caracteres ordinarios usados en regexe: _,
Las regexes se utilizan para encontrar patrones específicos en archivos de texto. Programas como ed, vim, grep, sed, awk, perl, entre otros muchos, hacen uso de regexes para buscar dichos patrones en archivos de texto.
Hay dos motores de búsqueda de patrones mediante expresiones regulares y hay que tenerlo muy en cuenta en función del comando que se quiere utilizar
- El motor básico de expresiones regulares (BRE), utilizado por ejemplo por sed y grep.
- El motor extendido de expresiones regulares (ERE), utilizado por ejemplo por
gawk
y perl.
Se añaden dos tablas con la notación de caracteres BRE/ERE empleados más frecuentemente con gawk
(tablas 14 y 15).
Tabla 14. Notación de caracteres especiales. Motor BRE/ERE.
Notación | Significado |
\ |
Escapa el significado del metacarácter, interpretación literal |
. |
Cualquier carácter sencillo salvo NULL |
* |
Cualquier cantidad de veces (o cero) el carácter precedente |
^ |
La regexp coincide al inicio de la línea o cadena de caracteres |
$ |
La regexp coincide al final de la línea o cadena de caracteres |
[123][A-Z] |
Cualquiera de los caracteres incluidos o rango indicado coinciden |
[[:alnum:]] |
Alfanuméricos [a-zA-Z0-9_] |
[[:alpha:]] |
Caracteres alfabéticos [a-zA-Z] |
[[:space:]] |
Espacios (' ' , tabuladores, salto de línea) |
[[:blank:]] |
Coincide espacios y tabuladores |
[[:upper:]] |
Coincide [A-Z] |
[[:lower:]] |
Coincide [a-z] |
[[:digit:]] |
Coincide [0-9] |
Y otra tabla en particular, con la notación de caracteres ERE usados más frecuentemente:
Tabla 15. Clase de caracteres ERE más frecuentemente usados.
Notación | Significado |
\w |
Caracteres alfanuméricos [a-zA-Z0-9_] |
\W |
Caracteres no alfanuméricos [^[:alnum:]_] |
\s |
Coincide con espacios y tabuladores |
\d |
Coincide [0-9] |
\< |
Coincide con el inicio de una palabra |
\> |
Coincide con el final de una palabra |
{n,m} |
Expresión de intervalo: coinciden n instancias, o de n a m instancias |
+ |
Coincide una o más instancias de la regexp precedente |
¿ |
Coinciden cero o una instancia de la regexp precedente |
| |
Coincide la regexp especificada antes o después de | (esto|aquello) |
( ) |
Busca un match al grupo de regexes incluidas: (esto|aquello) |