我用这个把头撞在墙上。如何使用 sed
对包含换行符的文本进行正则表达式替换?
我需要替换下面显示的“version”XML 元素的值。有多个版本元素,所以我想替换“名称”元素之后的那个。
<name>MyName</name>
<version>old</version>
这是我的命令:
sed -i -E "s@(\s*<name>$NAME</name>\n\s*<version>)$VERSION_OLD(</version>)@\1$VERSION_NEW\2@g" $myfile.txt
据我所知,现在有一种方法可以使 sed
使用换行符,但我想不通。我已经在我的脚本中使用了 sed,所以理想情况下我更愿意重新使用它而不是说 perl
。
最佳答案
当您看到 name
元素时,您需要使用 N
命令来读取下一行:
文件:
<bar>MyName</bar>
<version>old</version>
<name>MyName</name>
<version>old</version>
<foo>MyName</foo>
<version>old</version>
使用 GNU sed:
sed '/<name>/{N;s/old/newer/}' file
输出:
<bar>MyName</bar>
<version>old</version>
<name>MyName</name>
<version>new</version>
<foo>MyName</foo>
<version>old</version>
关于regex - 在正则表达式中使用带有换行符的 sed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33655852/