Expresiones regulares
Presentación
Este capítulo presenta los caracteres especiales de las expresiones regulares. Estas son usadas por cierto número de comandos Unix y forman un mecanismo potente de selección de cadenas de caracteres.
Las expresiones regulares se componen de caracteres ordinarios y de caracteres con un significado particular. Existen dos tipos de expresiones regulares:
-
Las expresiones regulares básicas (ERb).
-
Las expresiones regulares extendidas (ERe).
Las ERb se usan en los comandos siguientes:
-
vi (búsqueda y sustitución)
-
grep
-
expr
-
sed
Las ERe se usan en los comandos siguientes:
-
grep con la opción -E, egrep
-
awk
Caracteres comunes en ERb y ERe
Carácter especial |
Significado |
Marcadores de posición |
|
ˆ |
Comienzo de línea |
$ |
Fin de línea |
\< |
Comienzo de una palabra. Caracteres que pueden formar parte de una palabra: [A-Za-z0-9_] |
\> |
Fin de una palabra |
Representar un caracter |
|
. |
Un carácter cualquiera |
[lista_de_caracteres] |
Un carácter de los citados en la lista |
[ˆlista_de_caracteres] |
Un carácter que no esté entre los citados en la lista |
Principales clases de caracteres POSIX |
|
[:clase:] |
Para la lista consulte el capítulo Anexos - Clases de caracteres POSIX. La expresión [:clase:] se debe poner entre corchetes. |
Carácter de repetición |
|
* |
De 0 a n veces el carácter o grupo anterior |
Carácter de protección |
|
\c |
Protección del carácter especial c |
Ejemplos
Expresión regular |
Significado |
sol |
Cadena que contenga "sol". Ejemplos de correspondencia: Hoy ha hecho sol, ¿y mañana? ¡¡sol todos los días!! Pasar sus vacaciones al sol |
ˆsol |
Cadena que empiece por "sol". Ejemplo de correspondencia: sol todos los días |
sol$ |
Cadena que termine por "sol". Ejemplo de correspondencia: Pasar sus vacaciones al sol |
ˆsol$ |
Cadena que contiene solo "sol". |
ˆ[A-Z][5-9].$ o ˆ[[:upper:]][5-9].$ |
Cadena compuesta de tres caracteres: el primero... |
Caracteres específicos de ERb
Carácter especial |
Significado |
Caracteres de repetición |
|
\{m\} |
m veces el carácter anterior |
\{m,\} |
Al menos m veces el carácter anterior |
\{m,n\} |
Entre m y n veces el carácter anterior |
Otros |
|
\(ERb\) |
Memorización de una ERb |
\1, \2, ... |
Recordatorio de memorización |
En las ERb, el carácter "\" otorga un significado especial a los paréntesis y a las llaves.
Ejemplo
|[0-9]\{5\}| |
Cadena que contenga un número de cinco cifras rodeado de dos barras verticales. Ejemplos de correspondencia: calle Asunción|08024|Barcelona |13005|Ciudad Real |
En el capítulo El comando sed se muestran ejemplos de sustitución.
Caracteres específicos de ERe
Carácter especial |
Significado |
Caracteres de repetición |
|
? |
0 o 1 veces el carácter o grupo anterior |
+ |
De 1 a n veces el carácter o grupo anterior |
{m} |
m veces el carácter anterior |
{m,} |
Al menos m veces el carácter anterior |
{m,n} |
Entre m y n veces el carácter anterior |
Otros |
|
(er1) |
Agrupación |
er1|er2|er3 |
Alternativas |
En las ERe, las llaves y los paréntesis pierden su significado especial si se les antepone una barra invertida.
Ejemplos
ER |
Significado |
ˆ[+-]?[0-9]+$ |
Cadena que represente un nombre entero (al menos una cifra) con la posibilidad de estar precedido de un signo (0 o 1 veces) Ejemplos de correspondencia: 2 -56 +235 789654 |
\|[0-9]{5}\| |
Cadena que contenga un número de cinco cifras rodeado por dos barras verticales. Ejemplos de correspondencia: Paseo de la Castellana|28003|Madrid |33001|Oviedo |
\{[0-9]{2}\}$ |
Cadena que termine con dos cifras entre llaves. Ejemplos de correspondencia: nota1{23} {78} |
ˆasunto|cosa$ |
Cadena que empiece con "asunto" o acabe con "cosa". |
ˆ(truc|cosa)+$ |
Cadena compuesta de 1 a n ocurrencias de "truc" o de "cosa". Ejemplos de correspondencia: asunto cosa asuntocosaasunto cosacosa |
Uso de expresiones regulares por comandos
1. El comando vi
Las ERb se usan en el editor vi para la búsqueda y sustitución de cadenas de caracteres.
Sintaxis
Búsqueda (modo comando):
/ERb
Sustitución (modo ex):
:[dirección[,dirección]]s/ERb/
expresión-de-remplazo/[flags]
En el capítulo El comando sed se muestran ejemplos de sustitución, que utiliza la misma sintaxis que el editor vi.
2. El comando grep
Esta sección ilustra el uso de expresiones regulares mediante el comando grep normalizado por POSIX. Usado con la opción -E, el comando entiende las expresiones regulares extendidas.
Sintaxis básica
grep [-iv...] expresión-regular-básica [ arch1 ... ]
grep [-iv...] -E expresión-regular-extendida [ arch1 ... ]
El comando grep usado con la opción -E remplaza el comando egrep. Para otras opciones, consultar el manual del comando.
Ejemplos
A continuación se muestra el archivo tel2.txt:
$ cat tel2.txt
Méndez Roca, Gisela|calle Ruiseñor|28023|Madrid|915351478
Ruiz del Castillo, Marcos|calle Balmes|08020|Barcelona|932282177
Hernández Darín, Alberto|plaza mayor|13190|Corral de Calatrava|
926448829
Gómez Bádenas, Josefina|calle Sagasta|13190|Corral de Calatrava|
926443602
Martínez Parra, Marta|calle de la Santa Trinidad|38870|La Calera|
984122119
Expósito Heredia, Pedro|calle del castillo|38870|La Calera|
984122369
$
Búsqueda de la cadena "calatrava" en mayúsculas o minúsculas:
$ grep -i 'calatrava' tel2.txt
Hernández Darín, Alberto|plaza mayor|13190|Corral de
Calatrava|926448829
Gómez Bádenas, Josefina|calle Sagasta|13190|Corral de
Calatrava|926443602
$
Búsqueda de las líneas que comiencen por la letra ’G’:
$ grep 'ˆG' tel2.txt
Gómez Bádenas, Josefina|calle Sagasta|13190|Corral de
Calatrava|926443602
$
Búsqueda de las líneas que terminen por 9:
$ grep '9$' tel2.txt
Hernández Darín, Alberto|plaza mayor|13190|Corral de
Calatrava|926448829
Martínez Parra, Marta|calle de la Santa Trinidad|38870|
La Calera|984122119
Expósito Heredia, Pedro|calle del castillo|38870|
La Calera|984122369
$
Búsqueda de las líneas que contengan dos ocurrencias sucesivas de la letra ’r’:
$ grep 'rr' tel2.txt
Hernández Darín, Alberto|plaza mayor|13190|Corral de
Calatrava|926448829 ...
Ejercicios
Los archivos proporcionados para los ejercicios están disponibles en el directorio dedicado al capítulo, en Ejercicios/archivos.
1. Expresiones regulares
a. Ejercicio 1: expresiones regulares con vi
Sea el archivo expr.txt:
$ cat expr.txt
felipe 10 plaza de la concordia 91.511.11.11
annie2 25/27 calle Victor Hugo 91.485.22.48
fernando 20 valencia 96.221.33.33
cristina avenida de la ilustración 93/455/78/52
cris 98.622.33.44
jorje 48 bravo murillo 630.22.53.48
XincX 45 plaza de neptuno 915.45.45.78
annie2 25 calle de Victor Hugo 910.48.22.48
XristiX 35/36 calle del querol 920/54/58/45
XarinX Avda. de la marina 920.54.58.65
Realice las siguientes operaciones...