0

我试图找到所有实例aaa并将其替换为bbb但保留aaa. 这是我在 PHP 中使用 PCRE 的方法:

preg_replace('#(.?)aaa#', '\1bbb', 'aaasdfg');

我将如何使用 sed 做类似的事情?这是我的尝试(没有用):

sed -i.bak -r 's/(.\?)aaa/\1bbb/g' filename.ext

这是一个人为的例子。我想做的事情有点复杂,但长话短说,我正在努力.?工作。

有任何想法吗?

4

1 回答 1

2

刚才我误读了你的问题,我以为你想.*?用 sed 做。..

好的,现在我明白你的意思了。在您提出的另一个问题中,我提到,对于 BRE,您必须转义这些字符以赋予它们特殊的含义。但是对于 ERE,您必须转义具有特殊含义的字符才能获取文字字符串。

您使用-r, 让 sed 使用 ERE,但您转义了?,这意味着您想要匹配文字字符串?

尝试这个:

sed -i.bak -r 's/(.?)aaa/\1bbb/g' filename.ext

或这个:

sed -i.bak 's/\(.\?\)aaa/\1bbb/g' filename.ext

测试:

默认使用 BRE

kent$  echo "aaasdf
xaaasdf"|sed 's/\(.\?\)aaa/\1bbb/'
bbbsdf
xbbbsd

与-r,ERE:

kent$  echo "aaasdf
xaaasdf"|sed -r 's/(.?)aaa/\1bbb/' 
bbbsdf
xbbbsdf
于 2013-08-27T21:36:52.360 回答