Expresar mejor que lineas utilizar en los comandos para leer texto (grep y sed) es el principal uso de los expresiones regulares. Al dominarlas, podremos extender nuestro manejo de patrones o frases a buscar.

Si por ejemplo se buscan palabras que contengan la letra D en un archivo de texto.

[tusysadmin@localhost dict]$ grep d spanish | head -n 5
abad
abada
abadejo
abadenga
abadengo

Diferente sería mostrar las palabras que inician con esa letra, para esto usamos el acento circunflejo (^).

[tusysadmin@localhost dict]$ grep ^d spanish | tail -n 5
duunviral
duunvirato
duunviro
dux
duz

Si por el contrario, buscamos las palabras que terminen con la letra D usamos el símbolo de dólar ($).

[tusysadmin@localhost dict]$ grep d$ spanish | head -n 5
abad
absurdidad
accesibilidad
accidentalidad
aceptabilidad

Es posible usar los corchetes [ ] para indicar los caracteres que pueden aparecer dentro de una determinada posición.

[tusysadmin@localhost dict]$ grep ^d[aei]s[ae] spanish | tail -n 5
disertadora
disertante
disertar
diserto
disestesia

La salida del comando anterior muestra las palabras que inician con d seguido de una de las letras a, e o i; seguido de la letra s y por último una de las letras a o e.

Exclusiones y Rangos

Si lo que se busca es decir que caracteres no queremos imprimir usamos el ^ dentro de los corchetes.

[tusysadmin@localhost dict]$  grep ^m[^aei]s[ae] spanish | tail -n5
muselina
museo
museografía
musequí
muserola

Dentro de los corchetes es posible aceptar rangos para indicar todos los valores intermedios entre valor inicial y final. Esto sustituye el tener que escribir varias letras o números.

[tusysadmin@localhost dict]$  grep ^c[l-t]s[m-z].$ spanish
cospe
costa
coste
costo

Podemos negar el contenido de los corchetes usando en circunflejo.

[tusysadmin@localhost dict]$  grep ^c[^l-t]s[m-z].$ spanish
casón
caspa
casta
casto
cesta
cesto
cisma
cisne

Expresiones Extendidas

Se trata del uso de grep con la opción -E, en Unix y en algunas distribuciones puede usarse el comando egrep pero es poco usada.

Buscar palabras que tengan letras de un determinado rango y número.

tusysadmin@localhost dict]$ grep -E '^[g-p]{8}$' spanish 
hipólogo
homólogo
homónimo
mogollón
monólogo
pimpollo
piojillo
piopollo
polígono

Las palabras mostradas tienen 8 letras y además están entre g y p. He fijado el número de letras pero pueden ser rangos; por ejemplo, entre 4 y 8.

[tusysadmin@localhost dict]$ grep -E '^[g-p]{4,8}$' spanish | head -n 5
gilí
gnomo
gnomon
gong
gongo

Hasta 8 letras.

[tusysadmin@localhost dict]$ grep -E '^[g-p]{,8}$' spanish | tail -n 5
pomo
pomol
pompo
pompón
pongo

Al menos 5 letras.

[tusysadmin@localhost dict]$ grep -E '^[g-p]{5,}$' spanish | head -n 5
gnomo
gnomon
gongo
himno
hinojo

Es posible el uso de expresiones extendidas para buscar todas las palabras con cierto número de letras; por ejemplo, 7.

Mostrar dos expresiones regulares.

[tusysadmin@localhost dict]$ grep -E '^a.*t$|^e.*z$' spanish 
accésit
acimut
alacet
algunt
eficaz
electriz
escasez
estupidez

Es posible la agrupación de expresiones regulares usando paréntesis o para afectar un determinado carácter en especial, ejemplo.

[tusysadmin@localhost dict]$ grep -E '(c[aeiou]){2}' spanish | head
abdicación
acacia
acacianos
acecido
acecinador

De igual forma que en ejemplos anteriores, el numero puede ser fijo o manejar mínimos y máximos. Hasta aquí el post del día de hoy, cualquier duda la pueden dejar en los comentarios.