Está en la página 1de 5

Captulo 10

Expresiones regulares
?

El elemento precedente es opcional y debe coincidir al menos una


vez.

*
{n}

El elemento precedente debe coincidir cero o ms veces.


El elemento precedente debe coincidir exactamente n veces.

+
{,m}

El elemento precedente debe coincidir una o ms veces.


El elemento precedente es opcional y debe coincidir al menos m
veces.

{n,m}

El elemento precedente debe coincidir al menos n veces pero no


ms de m veces.
La cadena pablo.
La cadena pablo al principio de la linea.
La cadena pablo al final de la linea.
La cadena pablo formando una nica lnea.
La cadena nio o nia.
La tercera letra no es una vocal minscula.
La tercera letra es cualquier carcter.
Cualquier lnea que contenga 4 caracteres.
Cualquier lnea que comienza por punto.
Cualquier lnea que no comienza por punto.
nio, nios, nioss, niosss, etc
nio entre comillas dobles.
nio con o sin comillas dobles.
una o ms letras minsculas.
una o ms letras minsculas (slo vlido en algunas aplicaciones).
cualquier carcter que no sea ni nmero ni letra mayscula.
cualquier letra sea mayscula o minscula.
cualquier carcter que sea A, x o 5.
una de las tres palabras.
la palabra susto o arbusto.
gato, gata, gasto, gaita, etc.
cualquier palabra que empiece por ga.
cualquier palabra que termine por o
la palabra nio
dos o ms oes en una misma fila.
Representa un tabulador.
Representa el "retorno de carro" o "regreso al inicio" o sea el lugar
en que la lnea vuelve a iniciar.
Representa la "nueva lnea" el carcter por medio del cual una
lnea da inicio.
Representa una "campana" o "beep" que se produce al imprimir
este carcter.
Representa la tecla "Esc" o "Escape"
Representa un salto de pgina.
Representa un tabulador vertical.
Se utiliza para representar caracteres ASCII o ANSI si conoce su

pablo
^pablo
pablo$
^pablo$
ni[oa]
ni[^aeiou]o
ga.o
^....$
^\.
^[^.]
nos*
nio
*nio*
[a-z][a-z]*
[a-z]+
[^0-9A-Z]
[a-zA-Z]
[Ax5]
nio|nia|nada
(s|arb)usto
ga?t[oa]
\<ga
o\>
\<nio\>
o\{2,\}
\t
\r
\n
\a
\e
\f
\v
\x

\u

\d
\w
\s
\D
\W
\S
\A
\Z
\b
\B

cdigo. De esta forma, si se busca el smbolo de derechos de autor


y la fuente en la que se busca utiliza el conjunto de caracteres
Latin-1 es posible encontrarlo utilizando "\xA9".
Se utiliza para representar caracteres Unicode si se conoce su
cdigo. "\u00A2" representa el smbolo de centavos. No todos los
motores de Expresiones Regulares soportan Unicode. El .Net
Framework lo hace, pero el EditPad Pro no, por ejemplo.
Representa un dgito del 0 al 9.
Representa cualquier carcter alfanumrico.
Representa un espacio en blanco.
Representa cualquier carcter que no sea un dgito del 0 al 9.
Representa cualquier carcter no alfanumrico.
Representa cualquier carcter que no sea un espacio en blanco.
Representa el inicio de la cadena. No un carcter sino una
posicin.
Representa el final de la cadena. No un carcter sino una posicin.
Marca el inicio y el final de una palabra.
Marca la posicin entre dos caracteres alfanumricos o dos noalfanumricos.

Buscar una expresion regular


El comando grep toma una expresin regular de la lnea de comandos, lee la entrada estndar o una
lista de archivos, e imprime las lneas que contengan coincidencias para la expresin regular.
Opciones :
-c
-e PATRN
-f ARCHIVO
-H
-r
-i
-w
-v
-l
-c

Modificar la salida normal del programa, en lugar de imprimir


por salida estndar las lneas coincidentes, imprime la cantidad
de lneas que coincidieron en cada archivo.
Usar PATRN como el patrn de bsqueda, muy til para
proteger aquellos patrones de bsqueda que comienzan con el
signo -.
Obtener los patrones del archivo ARCHIVO
Imprimir el nombre del archivo con cada coincidencia.
Buscar recursivamente dentro de todos los subdirectorios del
directorio actual.
Buscar maysculas o minsculas.
Buscar palabra completa.
Buscar lo contrario.
Mostrar solo los archivos que contenga la palabra buscada.
Contar la cantidad de ocurrencia.

Ejemplo :
# grep 'root' /etc/passwd
# grep -i 'root' /etc/passwd
# grep -iw 'root' /etc/passwd
# grep -v 'root' /etc/passwd
# grep -l 'root' /etc/* | more

# grep -c 'root' /etc/* | more


Si queremos que tenga color la bsqueda realizamos la siguiente exportacin :
# export GREP_OPTIONS='--color=auto' GREP_COLOR='100;8'

Modificar archivos, buscar, etc


El comando sed nos permite, de una forma cmoda, borrar lneas, registros o sustituir cadenas de
caracteres dentro de las lneas, etc.
Opciones :
-n, --quiet, --silent
-e guin,
--expresion=guin
-f fichero-guin,
--file=fichero-guin
--follow-symlinks
-i[SUFIJO], --inplace[=SUFIJO]
-l N, --line-length=N
--posix
-r, --regexp-extended
-s, --separate
-u, --unbuffered
--help
--version

Suprime la muestra automtica del espacio de patrones.


Agrega el guin a la lista de rdenes para ejecutar.
Agrega el contenido del fichero guin a la lista de
rdenes
para ejecutar.
Selecciona solamente una columna para mostrar.
Edita ficheros en el lugar (crea un respaldo si se da una
extensin).
Especifica la longitud de corte de lnea deseado para la
orden `l'.
Desactiva todas las extensiones de GNU.
Utiliza expresiones regulares extendidas en el guin.
Considera los ficheros como separados en lugar de un
solo
flujo, largo y continuo.
Carga cantidades mnimas de datos de los ficheros de
entrada
y vaca los almacenamientos
temporales de salida con ms
frecuencia.
Ayuda.
Version.

Comandos :
d
i
s
p
\+
N
y

Borrar linea.
Insertar.
Sustituir.
Listar.
Mas de una expresin.
Fuerza la lectura de la siguiente lnea en la iteracin actual.
Sustituir.

Ejemplo :
# cp /etc/passwd .
# sed '1d' passwd | more
# sed '1,5d' passwd | more
# sed '1i Hola Mundo' passwd | more
# sed 's/root/pepe/' passwd | more
# sed -n '1,4p' passwd

# sed -n '/root/p' passwd


o
# grep 'root' passwd
Borra desde root hasta nobody inclusive.
# sed '/root/,/nobody/d' passwd
Si queremos obtener un listado slo de los directorios (las filas que comienzan con la letra "d").
Podramos utilizar el sed para borrar las entradas que no comienzan con esa letra:
# ls -l / | sed '/^d/!d'
Como vemos el smbolo de exclamacin ! detrs de la expresin regular niega la condicin.
Debera leerse como borrar todas las lneas que no comiencen con la letra 'd'
Otra forma :
# ls -l / | sed '/^d/p'
Sustituir los valores 123 por 456:
# echo 123 | sed 'y/[123]/[456]/'
456
Sacar los tabuladores de un archivo y reemplazarlo por un espacio :
# vi texto.txt
Hola
Mundo !

!!!!

# cat texto.txt | sed 's/\t\+/ /g'


Sacar los mas de un espacio de un archivo y reemplazarlo por un espacio :
# vi texto.txt
Hola Mundo !

!!!!

# cat texto.txt | sed 's/ \+/ /g'


Procesando varias lineas
# vi agenda.txt
Registro: 1
Nombre: Anibal
Telefono: 621-229
Registro: 2

Nombre: Hector
Telefono: 562-245
Registro: 3
Nombre: Pablo
Telefono: 622-354
Y queremos obtener lo siguiente :
1;Anibal;621-229
2;Hector;562-245
3;Pablo;622-354
Una solucin es poder leer de a una lnea a la vez. Este problema se resuelve con el comando N,
que fuerza la lectura de la siguiente lnea en la iteracin actual.
# sed 'N;N;N;s/\n/;/g;s/^Registro: \(.*\);Nombre: \(.*\);Telefono: \(.*\);$/\1;\2;\3/'
agenda.txt

Son 3 lneas (N).


Que reemplace el retorno de carro \n por un ;
buffer = "Registro: 1;Nombre: Anibal;Telefono: 621-229;"
Sacar las palabras Registro: , Nombre: , Telefono: y el punto y coma de la linea.
Los parntesis \(.*\) representa a cada valor \1, \2 y \3.

También podría gustarte