next up previous contents index
Next: Ficheros avanzados Up: Cuestiones avanzadas Previous: Cuestiones avanzadas   Índice General   Índice de Materias

Expresiones Regulares

Una expresión regular es la descripción de una serie de caracteres. Esta descripción se puede usar para buscar en un fichero texto que coincida con la expresión regular. Las expresiones regulares son similares a los comodines del intérprete de órdenes o shell (véase la sección 12.6 en la página [*]), pero son más complejas y potentes.

Las expresiones regulares se componen de texto y metacaracteres. Un metacarácter no es más que un carácter con un significado especial. Entre los metacaracteres se incluyen: . * [] - \^ $.

Si una expresión regular contiene solamente texto sin metacaracteres, coincidirá con ese texto. Por ejemplo, la expresión regular «mi expresión regular» coincide con el texto «mi expresión regular» y con nada más. Las expresiones regulares normalmente son sensibles a mayúsculas y minúsculas.

Para visualizar todas las líneas de un fichero que contienen cierta expresión regular, puede usar la orden egrep. Su sintaxis es la siguiente:

     egrep 'expresionregular' nombrefichero1 ...
Las comillas simples no siempre son necesarias, pero añadirlas nunca vendrá mal.

Por ejemplo, para encontrar todas las líneas que contengan la palabra GNU en la Licencia Pública General (GPL), escriba:

     egrep 'GNU' /usr/doc/copyright/GPL
egrep imprimirá las líneas por la salida estándar. Si desea obtener todas las líneas que contengan la palabra freedom seguida por un una cantidad indeterminada de texto, seguida por GNU, haga lo siguiente:

     egrep 'freedom.*GNU' /usr/doc/copyright/GPL
El punto . significa
«cualquier carácter», y el asterisco * significa «cero o más apariciones del carácter precedente», en este caso «cero o más apariciones de cualquier carácter». De manera que .* coincide en general con cualquier texto. egrep sólo crea coincidencias línea por línea, de forma que freedom y GNU tienen que estar en la misma línea.

He aquí un resumen de los metacaracteres de las expresiones regulares:

.
Coincide con cualquier carácter individual excepto el salto de línea.
*
Coincide con cero o más apariciones de la expresión precedente. Es decir, que la expresión a* coincide con cero más apariciones de a minúsculas, y .* coincide con cero o más caracteres.
[caracteres]
Los paréntesis cuadrados deben contener uno o más caracteres; la expresión completa entre los paréntesis coincide exactamente con uno o más caracteres en la serie. De esta forma, [abc]coincide con una a, una b, o una c; no coincide con cero caracteres, y no coincide con otro carácter que no sea uno de estos tres.
^
Fija la búsqueda al principio de la línea. La expresión ^The coincide con The cuando aparece al principio de la línea. No puede haber espacios antes de The. Si desea permitir espacios, puede permitir cero o más espacios de la manera siguiente: ^*The.
$
Coincide con el final de la línea. end$ precisa que el texto end esté al final de la línea, sin espacios ni texto en medio.
[^caracteres]
Esta expresión invierte el sentido de una lista entre paréntesis cuadrados. De esta forma, [^abc] coincide con cualquier carácter único excepto a, b, or c.
[carácter-carácter]
Puede especificar un rango de caracteres dentro de una lista de paréntesis cuadrados. Para coincidir con cualquier letra minúscula, utilice [a-z]. Puede especificar más de un rango; de esta manera, para especificar las tres primeras o las tres últimas letras del abecedario, escriba [a-cx-z]. Para especificar cualquier letra, sea mayúscula o minúscula, pruebe con [a-zA-Z]. Puede poner juntos rangos de caracteres y caracteres únicos, además del metacarácter ^metacharacter; por ejemplo [^a-zBZ]significa «cualquier carácter, excepto una letra minúscula, una B mayúscula o una Z mayúscula».
()
Puede utilizar los paréntesis para agrupar partes de la expresión regular, igual que lo haría con una expresión matemática.
|
Significa «o». Utilícelo para especificar una serie de expresiones alternativas. Generalmente deseará poner las alternativas entre paréntesis, de la siguiente manera: c(ad|ab|at)coincide con cad o bien cab o bien cat. Sin los paréntesis, coincidiría con cad o ab o at.
\
Permite escapar cualquier carácter especial; si desea encontrar literalmente un asterisco *, escriba \*. La barra invertida permite ignorar el significado especial al que estamos acostumbrados para *.
He aquí algunos ejemplos más que le ayudarán a formarse una impresión general de la cuestión:
c.pa
coincide entre otros con cepa, capa, copa, copar.
c\ .pa
coincide con c.pa, c.par.
sto*p
coincide con stp, stop, stoop.
car.*n
coincide con carton, cartoon, carmen.
xyz.*
coincide con xyz y con cualquier cosa que le siga; algunas herramientas, como egrep, coinciden sólo con cualquier cosa que le siga hasta el final de la línea.
^The
coincide con The al principio de la línea.
tiempo$
coincide con tiempo al final de la línea.
^Solo$
coincide con una línea que está compuesta únicamente por la palabra Solo, sin espacios, ni otros caracteres, nada en absoluto. Sólo se permite la palabra Solo.
p[aeo]sa
coincide con pasa, pesa, posa.
Ca[D-F]re
coincide con CaDre, CaEre, CaFre.
Ver[^0-9]
coincide con Ver seguido por cualquier carácter que no sea un número.
sal[ai][rn]
coincide con salar, salan, salir, salin.
[A-Za-z][A-Za-z]*
coincide con cualquier palabra que esté compuesta únicamente y al menos por una letra. No coincidirá con números o espacios.


next up previous contents index
Next: Ficheros avanzados Up: Cuestiones avanzadas Previous: Cuestiones avanzadas   Índice General   Índice de Materias
Enrique Zanardi 2000-11-26