Biblioteca Online : ¡La Suscripción ENI por 9,90 € el primer mes!, con el código PRIMER9. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Programación shell en Unix/Linux
  3. Expresiones regulares
Extrait - Programación shell en Unix/Linux ksh, bash, estándar POSIX (con ejercicios corregidos) (5ª edición)
Extractos del libro
Programación shell en Unix/Linux ksh, bash, estándar POSIX (con ejercicios corregidos) (5ª edición) Volver a la página de compra del libro

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

Los símbolos "images/symbol.PNG" y "images/FLECHE.png" utilizados en los ejemplos representan las teclas [Espacio] y [Tabulación].

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...