我明白sed
会
- 适用全部第 1 行的说明,然后是第 2 行...
- 之前的说明可能会改变模式空间因此下一条指令将在修改后的模式空间(而不是原始文本)上运行
例子是:
样本.txt 文件
pig cow
命令
sed -e 's/pig/cow/; s/cow/horse/;' sample.txt
预期输出
horse horse
实际输出
horse cow
我的预期输出的原因是:
- 第一条指令被替换猪和奶牛在里面模式空间
- 第二条指令被替换 2猪与 2马是在模式空间
答案1
替换命令s
默认只会替换第一的匹配,除非在替换结束定界符之后使用某些标志,如
sed -e 's/pig/cow/g; s/cow/horse/g' <sample.txt
该g
标志指示sed
对正则表达式的任何非重叠匹配尽可能多次地重复替换。
该命令的另一组标志s
(虽然在这里不适用,但了解一下可能很有用)是个位数标志,您可以选择用它来替换模式的第 n 个匹配项,如下所示
sed -e 's/a/A/3'
上面的代码会将每行输入的第三个更改a
为一个。A
有关详细信息,请参阅系统上sed
( )的手册。man sed