【发布时间】:2020-02-27 20:45:49
【问题描述】:
我正在尝试替换所有名为 pom.xml 的文件中包含 XML 的多行文本。
在实践中,我需要替换这部分:
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
与:
<groupId>jakarta.enterprise</groupId>
<artifactId>jakarta.enterprise.cdi-api</artifactId>
我想出了以下 sed:
find . -name pom.xml -exec sed -i 's/\<groupId\>javax\.enterprise\<\/groupId\>
\<artifactId\>cdi-api\<\/artifactId\>/\<groupId\>jakarta\.enterprise\<\/groupId\>
\<artifactId\>jakarta\.enterprise\.cdi-api\<\/artifactId\>/g' {} +
但是,从输出中返回“命令未终止”。 我对多行替换不太熟悉,你能建议任何修复或其他工具吗? 谢谢
【问题讨论】:
-
Don't Parse XML/HTML With Regex. 我建议使用 XML/HTML 解析器 (xmlstarlet, xmllint ...)。
-
除了@Cyrus 所说的,您应该使用
\n并为sed指定-z,而不是使用文字换行符。