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.. -- --------------------------------------------------------------- | Ing. Guillermo Escalante | | Nick IRC: MetallinuX | | GNU/Linux User #379221 | | Debian GNU/Linux "Testing/Unstable" | | "Cuando hablamos de Software Libre, | | nos referimos a la libertad, no al precio" | ---------------------------------------------------------------

