sed相当于PCRE的`。?`

时间:2013-08-27 21:24:38

标签: php regex sed pcre

我正在尝试查找aaa的所有实例,并将其替换为bbb,但保留aaa之前的第一个字符。以下是我使用PCRE在PHP中执行此操作的方法:

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

我怎样用sed做那样的事情?这是我的尝试(没有用):

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分: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

with -r,ERE:

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