模式标志 - 发生更换

如果我们只想替换一行中的第一个匹配项,我们像往常一样使用 sed

$ cat example
aaaaabbbbb
aaaaaccccc
aaaaaddddd
$ sed 's/a/x/' example
xaaaabbbbb
xaaaaccccc
xaaaaddddd

但是如果我们想要替换所有事件呢?

我们只是在最后添加 g 模式标志:

$ sed 's/a/x/g' example
xxxxxbbbbb
xxxxxccccc
xxxxxddddd

如果我们想要替换一个特定的事件,我们实际上可以指定哪一个:

$ sed 's/a/x/3' example
aaxaabbbbb
aaxaaccccc
aaxaaddddd

/3 是第 3 次出现。

Version = GNU sed

info sed,请参阅 GNU sed 手册以获取在线版本

POSIX 标准没有规定混合 g 和 NUMBER 修饰符时应该发生什么,目前在 sed 实现中没有广泛认可的含义。对于 GNU sed,交互被定义为:忽略 NUMBERth 之前的匹配,然后匹配并替换 NUMBERth 上的所有匹配。

$ sed 's/b/y/2g' example
aaaaabyyyy
aaaaaccccc
aaaaaddddd

$ sed 's/c/z/g3' example
aaaaabbbbb
aaaaacczzz
aaaaaddddd