使用sed
,我想搜索字符串并将其替换为maven pom.xml中的其他字符串
<groupId>com.abc</groupId>
<version>3.1</version>
带
<groupId>com.abc</groupId>
<version>4.1</version>
我写了
find . -name 'pom.xml' -type f -exec sed -i "s!"<groupId>com.abc</groupId>\n
<version>3.1</version>"!"<groupId>com.abc</groupId>\n <version>4.1</version>!" '{}' \;
但它永远不会奏效!
答案 0 :(得分:2)
您需要使用N
命令来阅读下一行。有关处理多行模式空间的更多详细信息,请查看优秀的Sed and Awk书籍。这有点繁琐。
将此sed命令保存到文件,例如cmd.txt
/<groupId>com.abc<\/groupId>/{
N
s/<groupId>com.abc<\/groupId>\n<version>3.1<\/version>/<groupId>com.abc<\/groupId>\n<version>4.1<\/version>/
}
然后运行:
$ sed -f cmd.txt pom.xml
答案 1 :(得分:1)
不要使用sed。 linebreaks是sed的一部分。这是xslt的工作。
以下代码段是从http://chrisdail.com/2009/05/17/changing-maven-pom-versions-with-groovy-and-xslt/
借用和调整的<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="version[../groupId='com.abc']">
<version>4.1</version>
</xsl:template>
</xsl:stylesheet>
只需执行xsltproc thisfile.xsl pom.xml
答案 2 :(得分:0)
试试这个......希望它有所帮助。
sed -e 's/3.1/4.1/g' pom.xml > pom1.xml