LinuxParty
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...

-
Ciencia
- ¿Adiós a las canas? La ciencia descubre cómo revertir el proceso de las canas
- Nuevos estudios científicos sugieren que la Sábana Santa podría tener 2.000 años de antigüedad
- Mark Thomson, del CERN: La IA revolucionará la física fundamental
- Por qué incluso los físicos siguen sin entender la teoría cuántica 100 años después
- Se descubrieron tres nuevos materiales superconductores en 2024
- Desigualdad global en las tasas de natalidad: ¿Cómo afectará el baby boom y el baby bust a la economía en 2100?
- El agujero más cercano al centro de la tierra. Voronya
- Microplásticos y seguridad alimentaria. Capitulo III. Mecanismos moleculares e impacto de los microplásticos en la salud humana.
- Microplásticos Y Seguridad Alimentaria. Capítulo II
- La Lima de Cañaveral, Cáceres, oriunda de ésta zona, es exclusiva y está en peligro de extinción.
- Microplásticos Y Seguridad Alimentaria. Capítulo I: Origen Y Generalidades.
- Glaciares de Sal Plantean la Probabilidad de Vida en Mercurio, el planeta más próximo al Sol.
- Hombre de Petralona: Un Enigma Cronológico que Desafía las Teorías Establecidas
- Implante Innovador Recupera Movilidad en Extremidades Paralizadas, Abriendo Camino a Curar la Parálisis.
- La Prótesis Biónica que Cambió la Vida de una Paciente Después de 20 Años de dolores