En este artículo pretendo entrar en el mundo de las expresiones regulares en Unix sin complicarnos demasiado, me gustó la definición de expresiones regulares que hacen en desarrollo web:
– Las expresiones regulares son una serie de carácteres que forman un patrón, normalmente representativo de otro grupo de carácteres mayor, de tal forma que podemos comparar el patrón con otro conjunto de carácteres para ver las coincidencias.
(^) La expresión encaja o coincide al principio de la línea, por ejemplo ^A
(?) La expresión encaja o coincide al final de la línea, por ejemplo A?
(\) Escapa el carácter siguiente a la contrabarra, haciendo que deje de ser un carácter especial, ejemplo in \*
([]) La expresión encaja o coincide con alguno de los caracteres incluidos entre los corchetes, también se puden especificar rangos, por ejemplo [aeiou] o [0-9].
[^ ] La expresión encaja o coincide con cualquier carácter excepto los que se encuentran entre corchetes, ejemplo, todos los carácteres excepto del 0 al 9: [^0-9]
(.) La expresión encaja respecto a un único carácter, de cualquier valor, excepto al final de la línea.
(*) La expresión coincide con 0 o más carácteres de la expresión que le precede.
\{x,y\} La expresión encaja o coincide desde X hasta Y respecto a lo que la ocurrencia que le precede.
\{x\} La expresión encaja exactamente X ocurrencias de lo que le precede.
\{x,\} La expresión encaja exactamente X o más ocurrencias de lo que le precede.
Algunas de estas expresiones regulares pueden resultar confusas, lo mejor es poner unos cuantos ejemplos para aclarar algunas de ellas:
$ # Listar todas las líneas que comienzan por "From:" de nuestros emails: $ grep '^From: ' /usr/mail/$USER $ # Buscar líneas con al menos una letra de la a a la z (incluidas mayúsculas) de un fichero concreto. $ grep '[a-zA-Z]' search-file.txt $ # Lista cualquier carácter que no sea ni letra ni número de un fichero concreto. $ grep '[^a-zA-Z0-9] search-file.txt $ # Buscar teléfonos del tipo 999-9999 de un fichero concreto. $ grep '[0-9]\{3\}-[0-9]\{4\}' search-file.txt $ # Buscar líneas de un fichero con solamente 1 carácter: $ grep '^.$' search-file.txt $ # Buscar líneas que comienzan con el carácter "." $ grep '^\.' search-file.txt $ # Buscar líneas que comienzan por un "." y dos letras en minúscula: $ grep '^\.[a-z][a-z]' search-file.txt
Y podríamos estar poniendo ejemplos hasta el infinito, este artículo está basado en uno de la genial web de IBM, además podéis encontrar muchísima información sobre expresiones regulares en estos enlaces:
– Curso básico de Unix: Expresiones regulares
– Más expresiones regulares e información por parte de IBM.
Como critico los malos post aplaudo los buenos, este es muy bueno.
Saludos
Hola, el última ejemplo que publicas es erróneo, lo he visto en algunos posts relacionados con grep.
Grep toma en cuenta al abecedario en este exacto orden: aAbBcCdDeEfF…xXyYzZ.
Es decir que si tu buscas un carácter con el patrón [a-z] incluyes las mayúsculas de TODO el rango EXCEPTO la zeta mayúscula.
Aún no encuentro un comodín que sustituya cualquier carácter que sea mayúscula, y otro que sea minúscula, si consigues esa información coméntamelo.
Saludos.