使用 sed 替换 2 个连续行

使用 sed 替换 2 个连续行

我一直在尝试用以下命令替换连续的行sed

sed -i -e '/string1/{N;s/string2/string2_replaced/;N;s/string3/string3_replaced}' file1

sed -i -e '/string1/{n;s/string2/string2_replaced/;n;s/string3/string3_replaced}' file1

其中 file1 包含:

string1
string2
string3

我不断得到sed: unmatched '/'。如何将 file1 的内容更改为:

string1
string2_replaced
string3_replaced

这样,只有当 string2 和 string3 位于连续行并且紧接在与 string1 匹配的行之后时,它们才会被替换?

另外,如果我不确定 string2 到底出现在哪里(哪一行),但确定它出现在 string1 之后,如何搜索和替换 string2 ?

答案1

你错过了最后一个/,它是s/string3/string3_replaced/

sed -e '/string1/{N;s/string2/string2_replaced/;N;s/string3/string3_replaced/}' file1

请注意,并非所有实现都支持和sed中同一行中的多个命令。为了便携性:{}

sed -e '/string1/ {
  N
  s/string2/string2_replaced/
  N
  s/string3/string3_replaced/
}' file1

相关内容