Posted By: Cobra (Breaking the waves) on 'CZscripts'
Title:     perl a regexp - pamatovani patternu pro pozdejsi pouziti
Date:      Fri Mar 11 00:03:44 2011

Zdar a silu,

koukam ze se tu uz pres rok a pul nic nenapsalo, tak zkusim, jestli
jeste nejaky scriptar zije :-)

Potrebuju v shellu na commandlajne udelat filtr, ktery mi vstup upravi
tak, ze najde urcity pattern, a ten upravi tak, ze zacatek a konec
budou stejne, ale prostredek se zameni za jednu z definovanych promennych:

a="12"; cat | perl -pe "s#(neco)(se)(w+)#3 $a 1#"
vstup: necosedeje
vystup: deje 12 neco

problem je, kdyz nechci na vystupu vlozit mezi slova tu mezeru, tedy
kdyz chci dostat string "deje12neco". Konstrukce #3$a1# totiz zpusobi,
ze 3$a se vyhodnoti jako 312, tedy odkaz na 312. zavorku, a doplni to
nejaky nahodny dump pameti. Kdyz pouziju misto lomitek $, tedy $3$a$1,
tak se to snazi doplnit $1 a $3 ze shellu, kde tyto hodnoty nejsou
definovane a tedy jsou prazdne. Musel bych cely regexp misto do uvozovek
dat do apostrofu, ale pak se mi zase nedoplni systemova promenna $a.

Otazka tedy je, jestli existuje nejaka konstrukce podobna shellovym
slozenym zavorkam ${a}, ktere oznaci, kde zacina a konci nazev promenne 
uvozene lomitkem, a abych zaroven v takovem regexpu mohl pouzit doplneni 
nejake systemove promenne.                       

Jo a samozrejme vim ze by to slo asi nejak obejit, a pro ucely
vysvetleni jsem cely problem dost zjednodusil, takze workaroundy
nepotrebuju, jedna se mi jen o to zjistit, jak presvedcit perl, aby
"1$a" chapal jako 2 promenne a ne jednu, a to bez oddeleni mezerou. V
nejhorsim bych tam nejaky delimiter dal a pak pres pajpu dalsim perlem
odstranil, ale to se mi moc nelibi.

Sem s napady, dik :-). Jo a pokud by nekdo vedel jak na to pomoci sedu nebo 
awk, tak je to taky akceptovatelne.

Cobra

Search the boards