Sed 未按预期工作

Sed 未按预期工作

我明白sed

  1. 适用全部第 1 行的说明,然后是第 2 行...
  2. 之前的说明可能会改变模式空间因此下一条指令将在修改后的模式空间(而不是原始文本)上运行

例子是:

样本.txt 文件

pig cow

命令

sed -e 's/pig/cow/; s/cow/horse/;' sample.txt

预期输出

horse horse

实际输出

horse cow

我的预期输出的原因是:

  1. 第一条指令被替换奶牛在里面模式空间
  2. 第二条指令被替换 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

相关内容