我试图找到所有实例aaa
并将其替换为bbb
但保留aaa
. 这是我在 PHP 中使用 PCRE 的方法:
preg_replace('#(.?)aaa#', '\1bbb', 'aaasdfg');
我将如何使用 sed 做类似的事情?这是我的尝试(没有用):
sed -i.bak -r 's/(.\?)aaa/\1bbb/g' filename.ext
这是一个人为的例子。我想做的事情有点复杂,但长话短说,我正在努力.?
工作。
有任何想法吗?
刚才我误读了你的问题,我以为你想.*?
用 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
测试:
kent$ echo "aaasdf
xaaasdf"|sed 's/\(.\?\)aaa/\1bbb/'
bbbsdf
xbbbsd
kent$ echo "aaasdf
xaaasdf"|sed -r 's/(.?)aaa/\1bbb/'
bbbsdf
xbbbsdf