Metacaracteres: Los Símbolos Especiales
Los metacaracteres son símbolos que tienen un significado especial en regex. NO representan el caracter literal, sino una instrucción.
La Regla de Oro: ¿A Qué Aplica?
Los cuantificadores (
*,+,?,{}) SIEMPRE aplican a lo que está INMEDIATAMENTE A SU IZQUIERDA.
Esta es la regla más importante. Memorízala.
a+ → El + aplica a la "a"
ab+ → El + aplica a la "b", NO a "ab"
(ab)+ → El + aplica al grupo "(ab)"
[ab]+ → El + aplica al conjunto "[ab]"
1. El Punto . - Cualquier Caracter
El punto coincide con cualquier caracter (excepto salto de línea).
. → Un caracter cualquiera
.. → Dos caracteres cualesquiera
a.c → "a", luego cualquier caracter, luego "c"
Ejemplos
| Patrón | Texto | ¿Coincide? |
|---|---|---|
a.c |
“abc” | ✓ |
a.c |
“aXc” | ✓ |
a.c |
“a9c” | ✓ |
a.c |
“ac” | ✗ (falta un caracter) |
a.c |
“abbc” | ✗ (hay dos caracteres) |
En Terminal
echo -e "abc\naXc\na9c\nac\nabbc" > punto.txt
grep "a.c" punto.txt
Salida:
abc
aXc
a9c
2. El Asterisco * - Cero o Más
El asterisco significa: “lo que está a mi izquierda puede aparecer 0, 1, 2, 3… o infinitas veces”.
a* → "", "a", "aa", "aaa", "aaaa"... (cero o más "a")
¡Cuidado! Cero También Cuenta
Patrón: ab*c
| Texto | ¿Coincide? | Explicación |
|---|---|---|
| “ac” | ✓ | cero “b” |
| “abc” | ✓ | una “b” |
| “abbc” | ✓ | dos “b” |
| “abbbbbc” | ✓ | muchas “b” |
En Terminal
echo -e "ac\nabc\nabbc\nabbbbbc" > asterisco.txt
grep "ab*c" asterisco.txt
Salida:
ac
abc
abbc
abbbbbc
3. El Más + - Una o Más
El más significa: “lo que está a mi izquierda debe aparecer AL MENOS una vez”.
a+ → "a", "aa", "aaa"... (una o más "a", pero NO cero)
Diferencia con *
| Patrón | “ac” | “abc” | “abbc” |
|---|---|---|---|
ab*c |
✓ | ✓ | ✓ |
ab+c |
✗ | ✓ | ✓ |
ab+c requiere al menos una “b”.
En Terminal (Necesita -E o -P)
echo -e "ac\nabc\nabbc" > mas.txt
# Con grep extendido
grep -E "ab+c" mas.txt
Salida:
abc
abbc
Nota: “ac” NO aparece porque + requiere al menos una “b”.
4. El Interrogante ? - Cero o Uno
El interrogante significa: “lo que está a mi izquierda es OPCIONAL (puede aparecer 0 o 1 vez)”.
a? → "" o "a" (cero o una "a")
Ejemplo: Hacer algo opcional
colou?r → "color" o "colour"
| Texto | ¿Coincide? |
|---|---|
| “color” | ✓ (cero “u”) |
| “colour” | ✓ (una “u”) |
| “colouur” | ✗ (dos “u”) |
En Terminal
echo -e "color\ncolour\ncolouur" > opcional.txt
grep -E "colou?r" opcional.txt
Salida:
color
colour
5. Resumen Visual: *, +, ?
PATRÓN: ab*c (cero o más "b")
↑
aplica a "b"
ac → ✓ (0 b)
abc → ✓ (1 b)
abbc → ✓ (2 b)
PATRÓN: ab+c (una o más "b")
↑
aplica a "b"
ac → ✗ (0 b, necesita al menos 1)
abc → ✓ (1 b)
abbc → ✓ (2 b)
PATRÓN: ab?c (cero o una "b")
↑
aplica a "b"
ac → ✓ (0 b)
abc → ✓ (1 b)
abbc → ✗ (2 b, máximo es 1)
6. Anclas: ^ y $
Las anclas NO coinciden con caracteres, sino con posiciones.
^ - Inicio de Línea
^Hola → "Hola" SOLO si está al inicio de la línea
echo -e "Hola mundo\nmundo Hola\nHola" > anclas.txt
grep "^Hola" anclas.txt
Salida:
Hola mundo
Hola
“mundo Hola” NO aparece porque “Hola” no está al inicio.
$ - Fin de Línea
mundo$ → "mundo" SOLO si está al final de la línea
grep "mundo$" anclas.txt
Salida:
Hola mundo
Combinar Ambas
^Hola$ → Líneas que son EXACTAMENTE "Hola"
grep "^Hola$" anclas.txt
Salida:
Hola
7. Escape \ - Quitar Significado Especial
Si quieres buscar un metacaracter literalmente, usa \ antes:
| Quiero buscar | Escribo |
|---|---|
Un punto . |
\. |
Un asterisco * |
\* |
Un signo de interrogación ? |
\? |
Un dólar $ |
\$ |
Ejemplo
echo -e "precio: $100\nprecio: 100" > precios.txt
# Buscar literalmente "$100"
grep '\$100' precios.txt
Salida:
precio: $100
Resumen de Metacaracteres Básicos
| Símbolo | Nombre | Significado | Ejemplo |
|---|---|---|---|
. |
Punto | Cualquier caracter | a.c → “abc”, “aXc” |
* |
Asterisco | Cero o más (del anterior) | ab*c → “ac”, “abc”, “abbc” |
+ |
Más | Una o más (del anterior) | ab+c → “abc”, “abbc” |
? |
Interrogante | Cero o una (del anterior) | ab?c → “ac”, “abc” |
^ |
Circunflejo | Inicio de línea | ^Hola → “Hola…” |
$ |
Dólar | Fin de línea | ...mundo$ |
\ |
Escape | Quitar significado especial | \. → punto literal |
Ejercicios
Sin ejecutar, predice qué líneas coinciden:
Archivo:
a
aa
aaa
ab
aab
aaab
b
ba
Patrones:
a+a*b^a+$a?b
Después verifica tus respuestas con grep -E.
Siguiente: Estructuras
Ahora veremos las estructuras: corchetes [], paréntesis () y llaves {}. Aquí es donde muchos se confunden, así que iremos paso a paso.