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/

Search the boards