我一直在尝试用以下命令替换连续的行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