Maj*_*imi 5 sed regular-expression
这是一个sed
命令。我想替换第三次出现的00
to11
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)
有人可以解释发生了什么吗?
当sed
匹配正则表达式模式时,它的下一次搜索从刚匹配的模式之后立即开始......要执行您想要的操作,您需要诸如perl
regex Look-Ahead 和 Look-Behind Zero-width Assertions 之类的东西。
在您的情况下,您想断言(检查)在您的整体模式的第一个之后确实存在子模式(第二个 0
)。所述子图案被视为具有零宽度,并且因此,当整体图案匹配时,搜索从之后立即继续第一图案,即部分,第一个零之后。 0
0