19.1. 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 299), 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.