我正在尝试查找aaa
的所有实例,并将其替换为bbb
,但保留aaa
之前的第一个字符。以下是我使用PCRE在PHP中执行此操作的方法:
preg_replace('#(.?)aaa#', '\1bbb', 'aaasdfg');
我怎样用sed做那样的事情?这是我的尝试(没有用):
sed -i.bak -r 's/(.\?)aaa/\1bbb/g' filename.ext
这是一个人为的例子。我想做的事情有点复杂,但长话短说,我试图让.?
工作。
有什么想法吗?
答案 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
试验:
kent$ echo "aaasdf
xaaasdf"|sed 's/\(.\?\)aaa/\1bbb/'
bbbsdf
xbbbsd
kent$ echo "aaasdf
xaaasdf"|sed -r 's/(.?)aaa/\1bbb/'
bbbsdf
xbbbsdf