使用 sed 替换第三次出现的模式

使用 sed 替换第三次出现的模式

这是一个sed命令。我想替换第三次出现的00to11

echo "0000000000000000" | sed -e 's/00/11/3'

输出是:

0000110000000000

但我认为输出将是:

0011000000000000

第一次出现00

{00}00000000000000

第二个:

0{00}0000000000000

第三个:

00{00}000000000000

有人可以解释发生了什么事吗?

答案1

sed正则表达式模式匹配时,它的下一个搜索立即开始刚刚匹配的模式...要做你想做的事,你需要像perl正则表达式这样的东西前瞻和后瞻零宽度断言

在您的情况下,您想要断言(检查)子模式(第二名 0)之后确实存在第一名 0你的整体模式。这子模式被视为具有零宽度,因此当整体模式匹配时,搜索会立即从第一名模式的一部分,即第一个零之后0

相关内容