linux - 查找匹配的文本并替换下一行

我正在尝试在文件中查找一行并将下一行替换为特定值。我试过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

最佳答案

一种方式: 示例文件

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

https://stackoverflow.com/questions/18620153/

相关文章:

linux - 如何让 GNU screen 读取 .bash_profile/.bash_rc 更

linux - 如果关键字触发然后执行命令,Shell 脚本来监视日志文件?

python - 如何在 Python 中监听 Linux 中的 'usb device inser

windows - Node.js 开发,windows 还是 linux?

linux - 如何在非阻塞套接字上处理 OpenSSL SSL_ERROR_WANT_READ/W

linux - 如何在 Linux 上传递带感叹号的参数?

linux - 是否有一个 linux 命令来确定与给定进程 ID 关联的窗口 ID?

php - 根据外部请求在 Netbeans 中启动 XDebug

linux - 如何在 Linux 命令行上解析 CSV 文件?

c++ - 如何在 Linux 中找到 'temp' 目录?