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