找到匹配的文本并替换下一行

时间:2013-09-04 17:24:29

标签: linux sed

我试图在文件中找到一行,并用特定值替换下一行。我试过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

3 个答案:

答案 0 :(得分:34)

这可能适合你(GNU sed):

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

答案 1 :(得分:31)

一种方式: 样本文件

$ cat file
Cygwin
Unix
Linux
Solaris
AIX

使用sed,将'Unix'模式后的下一行替换为'hi':

$ 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>

答案 2 :(得分:4)

有效。 Additionaly有兴趣提一下,如果你写,

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

注意两个n,它会在两行之后替换,依此类推。