LinuxParty

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado
 

En mi artículo anterior sobre las expresiones regulares, di algunos ejemplos de maneras en las que sepuede utilizar en la línea de comandos, con varias utilidades. Las Expresiones regulares también se pueden utilizar dentro de muchos editores de texto (a veces con una sintaxis ligeramente diferente, pero la esencia es la misma). Voy a usar Vim y Emacs, como ejemplos, para diferentes editores puede ser necesario consultar el manual para los detalles de la sintaxis.

Buscar y reemplazar, es probablemente la operación que usted más utiliza en cuanto a expresiones regulares en un editor. Primero veamos una simple no-regexp de búsqueda y reemplazo. Digamos que usted acaba de decidir cambiar el nombre de una variable 'foo' por 'fooOne'.

En la consola de texto:

echo foo |sed s/foo/fooOne/

Otros ejemplos:

echo día |sed s/día/mañana/
echo hola tío| sed s/tío/tía/
echo hola ¿cual es tu nombre?|sed s/"¿cual es tu nombre?"/"¿como te llamas?"/



En Vim, pulse Esc para activar el modo de comandos, y a continuación escriba:

:%s/foo/fooOne/g


% Significa que la operación debe llevarse a cabo en todo el documento. La parte importante es

s/foo/fooOne/g (También aplicable a sed)

que significa "reemplazar todas las instancias de 'foo' con 'fooOne'". La letra final g significa "global", sin ella se sustituirá el primer lugar en cada línea, pero con ella, se reemplaza cada ocurrencia.

Para utilizar este patrón de búsqueda y remplazo en emacs, Pluse: M-x y entonces escriba replace-string RET foo RET fooOne.

Sin embargo, mientras que esta operación no-regexp substituiría foo por el fooOne, también substituiría foobar por fooOnebar, que usted probablemente no quiera. Para evitar esto, utilice los marcadores de límite de palabra < y > así:

:%s/\<foo\>/fooOne/g

Esto restringe el reemplazo para ocurrir solamente cuando ' foo' exista como palabra (con un carácter (par de caracteres) del límite de palabra en cada lado de él). En Emacs:

M-x replace-regexp RET \<foo\> RET fooOne

Backreferences (como lo visto en el apartado anterior) puede también ser muy útil. Por ejemplo, digamos que quiere cambiar todas las referencias de las fechas en un archivo de estilo estadounidense (09/22/09) al estilo europeo, con año largo y un punto en vez de una raya vertical (22.09.2009). Esta regexp en Vim sería algo como:

:%s#\<\(\d\+\)/\(\d\+\)/\(\d\{2\}\)\>#\2.\1.20\3#g

Para Emacs:

M-x replace-regexp RET \<\([[:digit:]]+\)/\([[:digit:]]+\)/\([[:digit:]]\{2\}\)\> RET \2.\1.20\3

 

OK, que parece bastante complicado! En primer lugar, vamos a señalar que en vim, usamos # en lugar de /, dándonos s###g en lugar de s///g. Esto hace que sea más fácil de leer si usted está buscando / en el patrón, y también significa que usted no necesita escapar cualquier caracter /

Como se discutió en el artículo anterior, cada par de paréntesis, \<PATT\>, guarda una retrorreferencia a PATT. Aquí tenemos tres backreferences, con un límite de palabra delante y detrás (la \< y \>), separados por una barra entre cada uno de los backreferences (como en 09/22/09).

El primer patrón que estamos buscando es \d\+: y eso significa que al menos buscamos un dígito caracter (\d). Así que esto coincidirá con 9, 09, 12, etc.

En Emacs, esto se escribe [[:digit:]]+ (no hay necesidad de escapar el + en la sintaxis regexp de emacs, como se debe hacer en Vim). También puede usarse [[:digit:]] en lugar de \d en vim si lo prefiere.

:%s#\<\(\d\+\)/\(\d\+\)/\(\d\{2\}\)\>#\2.\1.20\3#g


La secuencia del reemplazo es entonces sencilla: reordene los tres backreferences de modo que vengan los dígitos del día primero, después el mes, después el año con 20 delante de ella, separado todo por un punto.
¡¡Sencillo!!


Artículos Relacionados.

Ejemplos de Expresiones Regulares:

Renombrar múltiples ficheros, quitar espacios, mayúsculas, etc...

Pin It

Escribir un comentario


Código de seguridad
Refescar



Redes:



 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Filtro por Categorías

Nos obligan a moslestarte con la obviedad de que este sitio utiliza Cookies. Ver política