模式标志 - 发生更换
如果我们只想替换一行中的第一个匹配项,我们像往常一样使用 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
实现中没有广泛认可的含义。对于 GNUsed
,交互被定义为:忽略 NUMBERth 之前的匹配,然后匹配并替换 NUMBERth 上的所有匹配。
$ sed 's/b/y/2g' example
aaaaabyyyy
aaaaaccccc
aaaaaddddd
$ sed 's/c/z/g3' example
aaaaabbbbb
aaaaacczzz
aaaaaddddd