这是一个sed
命令。我想替换第三次出现的00
to11
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
。