Sed ( és \( egyszerre

Fórumok

Üdv!

Van egy olyan problémám, hogy ha sedben egyszerre szeretném a (valami) és \(valami\) szintaktikát használni, akkor az egyszerűen nem működik. Egyszerű példa:

echo 'blabla 1a2b3c4d blabla'|sed -r 's/\(([0-9][a-z])+\)/- \1 -/'

Elvárt kimenet: blabla - 1a2b3c4d - blabla.
Kapott kimenet: blabla 1a2b3c4d blabla

További kísérletezések után a következőket tapasztaltam, pl:

echo 'blabla 1234 blabla'|sed -r 's/\([0-9]+\)/- \1 -/'

Elvárt kimenet: blabla - 1234 - blabla
Kapott kimenet (stderr): sed: -e kifejezés #1, karakter 20: Hibás hivatkozás (\1) a(z) `s' parancs RHS-ére

-r a (valami) miatt kell, de amint bekapcsolom -r-t, \(valami\) mintha elromlana.

Gondolom valami escape-elési probléma van, de én nem tudok rájönni, valaki tudna segíteni?

Ui: vagy extended regexpben \( egy ( karaktert jelentene?

sed --version|grep 'verzió': GNU sed verzió 4.2.1

Természetesen nem érdekel perl és egyéb más scriptnyelv, csakis sed, és csakis ebben a formában.

Hozzászólások


$ echo 'blabla 1a2b3c4d blabla'|sed 's/\(\([0-9][a-z]\)\+\)/- \1 -/'
blabla - 1a2b3c4d - blabla
$ echo 'blabla 1a2b3c4d blabla'|sed -r 's/(([0-9][a-z])+)/- \1 -/'     
blabla - 1a2b3c4d - blabla

Ui: vagy extended regexpben \( egy ( karaktert jelentene?

Pontosan. Alapbol escapelni kell a "()+" karaktereket, hogy specialis jelentessel birjanak a kiterjesztett regexpben pedig nem.