Posted By: JayDee (expect the unexpected) on 'CZscripts'
Title:     Re: perl a regexp - pamatovani patternu pro pozdejsi pouziti
Date:      Fri Mar 11 18:34:26 2011

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

Co treba:
perl -pe "s#(neco)(se)(w+)#${3}$a${1}#"
?

1 a spol. jsou stejnak nedoporucovane coby ideologicky zavadne a 
nejednoznacne, spravne to ma byt $1 a $3

j.d.

Search the boards