[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Ayuda. Expresiones Regulares en Perl



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


Reply to: