Anexo a la tercera entrega (gratis total hoygan)

IV Anexo a las redirecciones y filtros

Expresiones regulares

Las expresiones regulares no son más que cadenas de caracteres diseñadas para buscar y/o reemplazar otras cadenas de caracteres. Puede parecer una función sencilla, pero no debéis subestimar su potencial. Son usadas por varios comandos de Linux como grep, sed o awk; pero también las emplean otros lenguajes de programación como Perl.
La expresión regular más básica es la propia cadena de caracteres que buscamos. Por ejemplo, si deseamos encontrar todas las ocurrencias del término root en un texto, la expresión regular más simple es root. Dado que las expresiones regulares son sensibles al uso de mayúsculas y minúsculas, root no ofrecerá como resultado el término Root.

Usando corchetes [ ]

Para dar con las dos posibilidades (root y Root) podemos usar los corchetes, que son caracteres especiales en las expresiones regulares. La expresión regular [Rr]oot ofrecerá como resultado ambos términos. Pero el uso de corchetes no se limita al caso de mayúsculas y minúsculas; pensad que buscáis todos las ocurrencias de los términos pila y pala, se usaría la expresión p[ia]la.
Además podemos buscar un carácter dentro de un rango por medio del guión { - }. Por ejemplo, p[a-zA-Z]la encontrará todas las cadenas de caracteres que comiencen por p, le siga un carácter alfabético cualquiera, tanto en mayúscula como en minúscula, y finalice por la. Si quisiéramos que ese carácter fuese un dígito cualquiera podríamos haber puesto p[0-9]la.

El uso del punto { . }

Pensad que no queréis limitar la búsqueda a pila y pala; sino que aparezca también pela y todas las demás posibilidades. La expresión regular p[.]la lo hará por vosotros, ya que buscará todos los términos que comiencen por p, le siga cualquier carácter, y finalicen por la. Del mismo modo se poeden usar dos puntos seguidos para que sean sustituidos por dos caracteres: p[..]a, además de los anteriores, también ofrecerá como resultado el término puma.

El acento circunflejo { ^ }

El acento circunflejo (caret en inglés) tiene dos usos claramente definidos en la construcción de expresiones regulares. Por un lado, y combinado con los corchetes, sirve para excluir un carácter o un rango de ellos en la expresión. Por ejemplo, la expresión roo[^0-9] buscará cadenas que comiencen por roo y, a continuación, vaya un carácter cualquiera que no sea un dígito.
Por otro lado; el uso del acento circunflejo al inicio de una expresión regular (fuera de los corchetes) indica que deseamos localizar esa cadena de caracteres sólo cuando aparezca al principio de una línea. Por ejemplo, la expresión ^roo[^0-9] buscará cadenas que comiencen por roo seguido de cualquier caracter que no sea un dígito y que estén al comienzo de una línea.

El asterisco { * }

Es un carácter especial muy empleado en todos los lenguajes de intérprete de comandos como carácter comodín, pero su uso en expresiones regulares es algo diferente. Su uso indica que el carácter que le precede (o la expresión entre corchetes) puede aparecer una, ninguna o muchas veces. Veamos un ejemplo: la expresión regular Per*a ofrecerá como resultados válidos tanto Pera como Pea o Perra; es decir, la erre que precede al asterisco puede aparecer cero, una, dos, o más veces. Si la expresión fuese r[^0-9]*ma serían resultados válidos roma, redoma, rama, rma, etc.; pero no r2ma.

El cierre de interrogación { ? }

Su uso es muy similar al del asterisco, sólo que con este carácter la repetición del simbolo precedente se puede producir cero o una vez; no admitiendo más repeticiones del mismo. Veámoslo con los ejemplos anteriores: La expresión regular Per?a ofrecerá en esta ocasión los resultados Pera y Pea (la erre aparece una o ninguna vez) pero no Perra, por repetirse más de una vez la erre. Si la expresión fuese r[^0-9]?ma serían resultados válidos roma, rema, rma, rima, etc. pero no redoma ni r2ma.

El signo más { + }

Se emplea en vez del asterisco cuando queremos que el carácter precedente aparezca una o más veces. Con el asterísco podía aparecer cero, una o más veces. En los ejemplos anteriores: la expresión regular Per+a dará como resultados Pera y Perra, pero no Pea. Con la expresión r[^0-9]+ma se obtiene roma, redoma, rama... pero no rma ni r2ma

El carácter dolar { $ }

El símbolo del dolar, empleado al final de una expresión regular, indica que la cadena buscada debe aparecer al final de una línea. Recordad que el acento circunflejo (cuando se usa fuera de los corchetes, al inicio de una expresión regular) implica que dicha expresión debe aparecer al comienzo de una línea, Por ejemplo, si buscamos una cadena de caracteres por medio de la expresión regular root$ ofrecerá como resultados todas aquellas líneas que finalicen con la cadena root, pero no aquellas en las que aparezca root en otra posición. ^root hacía lo mismo pero cuando la cadena aparecía al principio de una línea.

Resumen

  • { . } El punto representa un único carácter cualquiera
  • { [ ] } Los corchetes encierran secuencias de caracteres
  • { - } El guión se usa en los corchetes para indicar un rango
  • { ^ } El acento circunflejo se usa en los corchetes para negar una secuencia o rango
  • { * } El asterisco busca una, ninguna o múltiples ocurrencias del carácter que le precede
  • { ? } El cierre de interrogación busca una o ninguna ocurrencia del carácter que le precede
  • { + } El signo más busca una o múltiples ocurrencias del carácter que le precede
  • { $ } El símbolo del dolar busca la expresión al final de una línea
  • { ^ } El acento circunflejo fuera de los corchetes busca la expresión al inicio de una línea
  • { } La contrabarra precediendo a un carácter especial anula su significado y lo toma como texto plano






El documento original se encuentra en Google docs.