find匹配的文本并replace下一行

我试图在文件中find一行,并用特定的值replace下一行。 我试过sed,但似乎不喜欢\ n。 还有什么可以做呢?

该文件如下所示:

<key>ConnectionString</key> <string>anything_could_be_here</string> 

我想把它改成这个

 <key>ConnectionString</key> <string>changed_value</string> 

这是我的尝试:

 sed -i '' "s/<key>ConnectionString<\/key>\n<string><\/string>/<key>ConnectionString<\/key>\n<string>replaced_text<\/string>/g" /path/to/file 

这可能适用于你(GNU sed):

 sed '/<key>ConnectionString<\/key>/!b;n;c<string>changed_value</string>' file 

一种方法:示例文件

 $ cat file Cygwin Unix Linux Solaris AIX 

使用sed,用'hi'模式'Unix'替换下一行:

 $ sed '/Unix/{n;s/.*/hi/}' file Cygwin Unix hi Solaris AIX 

对于你的具体问题:

 $ sed '/<key>ConnectionString<\/key>/{n;s/<string>.*<\/string>/<string>NEW STRING<\/string>/}' your_file <key>ConnectionString</key> <string>NEW STRING</string> 

有用。 另外有兴趣提到,如果你写,

 sed '/<key>ConnectionString<\/key>/!b;n;n;c<string>changed_value</string>' file 

注意这两个n,它在两行之后被替换,等等。