Posted By: Rat (prilis mnoho her) on 'CZscripts' Title: Re: perl a regexp - pamatovani patternu pro pozdejsi pouzitiy Date: Fri Mar 11 11:01:26 2011 O Zdar, > 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. Tak to nahrad az v tom perlu, e.g.: a="$a" perl -pe 'BEGIN { $a = $ENV{a}; } s#...#3$a1#;' Fantazii, jak predas a, se samozrejme meze nekladou. a je v perlu dost blby nazev pro globalni promennou, viz sort. > Cobra Krysa rat@atrey.karlin.mff.cuni.cz Jsem Krysa http://atrey.karlin.mff.cuni.cz/~rat/