我一直在尝试用以下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
Run Code Online (Sandbox Code Playgroud)
其中 file1 包含:
string1
string2
string3
Run Code Online (Sandbox Code Playgroud)
我不断得到sed: unmatched '/'。如何将 file1 的内容更改为:
string1
string2_replaced
string3_replaced
Run Code Online (Sandbox Code Playgroud)
所以只有当 string2 和 string3 在连续的行上并且它们紧跟在与 string1 匹配的行之后才被替换?
另外,如果我不确定它发生在哪里(哪一行),但确定它出现在 string1 之后,我该如何搜索和替换 string2?
你错过了最后一个/,它是s/string3/string3_replaced/:
sed -e '/string1/{N;s/string2/string2_replaced/;N;s/string3/string3_replaced/}' file1
Run Code Online (Sandbox Code Playgroud)
请注意,并非所有sed实现都支持{和内同一行中的多个命令}。便携性:
sed -e '/string1/ {
N
s/string2/string2_replaced/
N
s/string3/string3_replaced/
}' file1
Run Code Online (Sandbox Code Playgroud)