El mar, 08-08-2006 a las 05:50 -0400, Guillermo Escalante escribió: > Saludos > Les escribo a ver quien me puede echar una manito. Muchas gracias de antemano > > El cuento es el siguiente: estoy construyendo varias expresiones > regulares en Perl ya que necesito modificar en varios archivos de > configuración (archivos de texto plano) una cadena de texto, por > otra. El caso es que la cadena nueva (la que va a reemplazar) depende > de la cadena vieja (cadena a ser reemplazada). Específicamente es un > path hacia un archivo pero los nombres de los directorios contienen > las versiones de los programas, y el reemplazo debe hacerse utilizando > estas versiones. > > Esta primera es un ejemplo que ya resolvi (es para que vean más o > menos como es la cosa) > > los path's a reemplazar son más o menos asi > > "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" > > 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 > > usm*/conf/param.cfg son todos los archivos a modificar > > -------------------------------------------------------------------------------------------------------------------------------- > 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" > > Pero como ven en este caso solo necesito capturar la versión y pasarla > como parámetro > > se que la E.R. regular queda más o menos asi pero no se que iria > dentro del parentesis (para que sea pasado como variable a la cadena > que reemplazará) > > /opr/perl/bin/perl -p -i.bak -e 's!Systems/(no se que va > aqui)*/.*/UsmPrint.ps!Systems/$1/script/UsmPrint.ps!' > usm*/conf/param.cfg > > He leido muchisimos manuales y guias, de perl y de expresiones > regulares pero no he encontrado nada similar, he encontrado otras > cosas que me han ayudado con otras sustituciones parecidas, pero no he > encontrado la form correcta para capturar solo la versión. No se si en > este caso seria capturar lo que este entre el "-" y el "/" que en > este caso seria la versión. > > Una ves más cualquier ayuda de antemano será bien recibida.. > yo cortaria el pedazo ese ( la version) y lo meteria en una variable, siempre y cuando se encuentre entre n'-' y '/' -- Angel Claudio Alvarez Usuario Linux Registrado 143466 GPG Public Key en http://pgp.mit.edu key fingerprint = 3AED D95B 7E2D E954 61C8 F505 1884 473C FC8C 8AC4
Attachment:
signature.asc
Description: Esta parte del mensaje =?ISO-8859-1?Q?est=E1?= firmada digitalmente