Ü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.
- 1234 megtekintés
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.
- A hozzászóláshoz be kell jelentkezni
Valóban, köszönöm. (Csak tudnám erről melyik manpage ír...)
--
Don't be an Ubuntard!
- A hozzászóláshoz be kell jelentkezni
Pl. regex(7) es perlre(1) + info sed.
Ha POSIX regexp erdekel nezz ra erre: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html
- A hozzászóláshoz be kell jelentkezni