Expresiones regulares básicas
UNIX admite dos tipos de expresiones regulares: básicas y extendidas- las básicas son las clásicas de UNIX, aunque se consideran obsoletas en POSIX
- aplicaciones como grep o sed las usan por defecto
- para usar las extendidas:
- grep --> egrep o grep -E
- sed --> sed -r
- las expresiones extendidas proporcionan más potencia
- concuerdan (match) consigo mismos:
- a concuerda con a, ab con ab, etc.
- la excepción son los metacaracteres:
. [ ] ^ $ * ( ) \
ER de un sólo carácter
ER | concuerda con |
. | cualquier carácter |
[ ] | cualquiera de los caracteres entre corchetes, p.e. [abc] concuerda con a, b o c; [a-z] concuerda con cualquier letra minúscula |
[^ ] | cualquier carácter que no esté entre corchetes |
^ | principio de línea |
$ | final de línea |
* | 0 o más ocurrencias de la expresión regular anterior |
\( \) | permite agrupar ER |
\ | escapa un metacarácter |
- Dentro de [ ] los metacaracteres pierden su significado especial: p.e. [a.]c concuerda con ac y .c
- Para incluir un carácter ] en una lista colocarlo al principio; para incluir un ^ en cualquier lugar menos al principio; para incluir un - al final: p.e. [a^]c concuerda con ac y ^c
Ejemplos:
ER | concuerda con |
a..c | cadena que empiece por a, seguida por dos caracteres y c: a00c, xaxxcxx, aacc,... |
0[abc]0 | cadenas que tengan un 0 seguido de un carácter a, b, o c y seguido de otro 0: 0a0, 00ab0b0, bc0c0,... |
0[^abc]0 | cadenas que tengan un 0 seguido de un carácter distinto a a, b, o c y seguido de otro 0 |
0[a-z]0 | cadenas que tengan un 0 seguido de una letra minúscula, y 0 |
^abc | líneas que empiecen por abc |
abc$ | líneas que terminen por abc |
ab*c | cadenas que empiecen por a, que continúen con 0 o más b, y una c: abc, ac, abbc, aaccab,...pero no cba o aaab |
b[cq]*e | cadenas que empiecen por b, que continúen con 0 o más c o q, y una e: be, bcce, bccqqee o bqqqce |
.* | cualquier cadena |
abc.* | cualquier cadena que empiece por abc |
0\(abc\)*0 | cadenas que tengan un 0 seguido de 0 o más ocurrencias de abc, y seguido de otro 0: 0abc0, 00, 0abcabc0,..., pero no 0ac0 o 0cba0 |
^#.*\.$ | línea que empiece por # y termine por . (notar que el segundo . está escapado por la \; la ER .* implica 0 o más caracteres cualquiera) |
Repetición
Podemos repetir una regexp usando \{ \}Constructor | Propósito |
\{n\} | concuerda con exactamente n ocurrencias de la RE previa |
\{n,\} | concuerda con al menos n ocurrencias de la RE previa |
\{n, m\} | concuerda con entre n y m ocurrencias de la RE previa |
- a\{5\}: 5 ocurrencias del carácter a
- .\{5,\}: al menos 5 ocurrencias de cualquier carácter