[caracas-pm] Ayuda con Expresiones Regulares

Ernesto Hernández-Novich emhn at movistar.net.ve
Tue Aug 8 07:45:00 PDT 2006


Guillermo Escalante wrote:
> El caso es que la cadena nueva (la que va a reemplazar) depende
> de la cadena vieja (cadena a ser reemplazada).

Para eso "salvas" las partes que te interesan usando paréntesis y luego los
"recuperas" en la sustitución usando $1, $2, etc. según el orden de los
paréntesis.

[...]
> "Systems/1353NM-XXX/data/eml/usmvW.Y.Z/UsmPrint.ps"
> 
> donde XXX, es la versión (puede varia la cantidad de caracteres) y
> varia en el path de casi todos los archivos ejemplo (3.4, 4.5d, 7.9a,
> 4.5.6a 6.7.0)
> 
> W.Y.Z tambien pueden variar por algunos números o letras pero no son
> importantes en este caso
> 
> y la cadena que reemplaza seria la siguiente.
> 
> "Systems/1353NM-XXX/script/UsmPrint.ps"

De ahí concluyo que en realidad en este caso lo que quieres es deshacerte de
"/data/eml/.*/" y sustituirlo por "/script", dejando lo que está antes y lo
que está después sin cambio, ¿no?

> donde XXX es la versión de la cadena que reemplazara (osea la de la
> cadena anterior)
> 
> Asi me quedo la expresión regular para el caso anterior
> 
> /opr/perl/bin/perl -p -i.bak -e
> 's!Systems/([^/])*/.*/UsmPrint.ps!Systems/$1/script/UsmPrint.ps!'
> usm*/conf/param.cfg

Si mi razonamiento es correcto basta con

perl -i.bak -pe 's!/data/eml/[^/]*/!/script/!' archivos

> Ahora el cambio que necesito hacer (en donde tengo la duda) seria el
> siguiente: La cadena original seria igual
> 
> "Systems/1353NM-XXX/data/eml/usmvW.Y.Z/UsmPrint.ps"
> 
> donde XXX, es la versión (puede varia la cantidad de caracteres) y
> varia en casi todos loa archivos ejemplo (3.4, 4.5d, 7.9a, 4.5.6a
> 6.7.0)
> 
> W.Y.Z tambien pueden variar por algunos números o letras pero no son
> importantes en este caso
> 
> y la cadena que reemplaza ahora seria la siguiente.
> 
> "Systems/XXX/script/UsmPrint.ps"

Ahora lo único que quieres conservar es 'XXX' pero nuevamente deshacerte de
"/data/eml/usm.*/" entonces ahora es un poco más compleja

s!Systems/.+-([\d\w\.]+)/data/eml/usm.*/!Systems/$1/script/!
-- 
Ernesto Hernández-Novich - On Linux 2.6.16 i686 - Unix: Live free or die!
Geek by nature, Linux by choice, Debian of course.
If you can't aptitude it, it isn't useful or doesn't exist.
GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3


More information about the caracas-pm mailing list