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

Maj*_*imi 5 sed regular-expression

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

echo "0000000000000000" | sed -e 's/00/11/3'
Run Code Online (Sandbox Code Playgroud)

输出是:

0000110000000000
Run Code Online (Sandbox Code Playgroud)

但我认为输出将是:

0011000000000000
Run Code Online (Sandbox Code Playgroud)

第一次出现00

{00}00000000000000
Run Code Online (Sandbox Code Playgroud)

第二个:

0{00}0000000000000
Run Code Online (Sandbox Code Playgroud)

第三个:

00{00}000000000000
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*r.O 5

sed匹配正则表达式模式时,它的下一次搜索从刚匹配的模式之后立即开始......要执行您想要的操作,您需要诸如perlregex Look-Ahead 和 Look-Behind Zero-width Assertions 之类的东西

在您的情况下,您想断言(检查)在您的整体模式的第一个之后确实存在子模式(第二个 0)。所述子图案被视为具有零宽度,并且因此,当整体图案匹配时,搜索从之后立即继续第一图案,即部分,第一个零之后。 00