[caracas-pm] Ayuda con Expresiones Regulares

Guillermo Escalante metallinux at gmail.com
Tue Aug 8 05:42:39 PDT 2006


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


More information about the caracas-pm mailing list