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

-
Google
- "No obligues a Google a vender Chrome"
- OpenAI compraría Chrome de Google, testifica un ejecutivo en el juicio
- Google afirma que Gemma 3 alcanza el 98% de la precisión de DeepSeek usando solo una GPU
- Amazon, Google y Meta apoyan triplicar la energía nuclear para 2050
- Google eliminará la autenticación por SMS en Gmail e implementará códigos QR
- Google está desarrollando una IA que puede reemplazar a Chrome para ayudarte a comprar cosas y hacer investigaciones
- Google defiende un producto de búsqueda "mejor" mientras concluye el juicio antimonopolio
- Para ayudar a la interoperabilidad de Rust/C++, Google dona a Rust Foundation 1 millón de dólares
- La nueva 'protección IP' de Google Chrome ocultará las direcciones IP de los usuarios
- Firefox 118 ya está disponible para descargar con traducción integrada para sitios web
- Google comprará la energía a LevelTen Energy con su innovador enfoque para adquisición de energía limpia: LEAP™
- Google dice que es la herramienta de búsqueda preferida a sus rivales
- Ajustar Chrome para menor consumo de RAM y Batería.
- Google anuncia ChatGPT Rival Bard
- Google anuncia Flutter 3, ahora con soporte para macOS y Linux Desktop