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.