我正在尝试搜索xml文件并替换某个字符,以便使用shell脚本将所有1.5.1-SNAPSHOT替换为5.0.0
<modelVersion>4.0.0</modelVersion>
<groupId>com.verio.oss.common</groupId>
<artifactId>oss-common-parent</artifactId>
<name>oss-common-parent</name>
<version>1.5.1-SNAPSHOT</version>
<description>MarketPlace SuperPOM</description>
<modules>
<ui-server-svcs-version>1.5.1-SNAPSHOT</ui-server-svcs-version>
<ui-client-svcs-version>1.5.1-SNAPSHOT</ui-client-svcs-version>
<ui-widgets-version>1.5.1-SNAPSHOT</ui-widgets-version>
<ossb-billing-version>1.5.1-SNAPSHOT</ossb-billing-version>
<ossb-integration-version>1.5.1-SNAPSHOT</ossb-integration-version>
<oss-ems-config-version>1.5.1-SNAPSHOT</oss-ems-conf>
<properties>
<skipTests>true</skipTests>
<app-version>${project.parent.version}</app-version>
<app-build-date>09/27/2011</app-build-date>
<app-build-number>1</app-build-number>
<app-build-revision>101</app-build-rev>
我尝试过这个脚本,但它没有用,任何帮助都会有所帮助
#!/bin/bash
search="(1\.5.\1-\SNAPSHOT\)"
rep="(\5.\0.\0)"
sed -i.bak 's/${search}/${rep}/g' nameoffile.xml
fi
答案 0 :(得分:3)
您的脚本似乎存在许多问题。
第6行包含fi
之前没有任何匹配的if
您要搜索的正则表达式应该是1\.5\.1-SNAPSHOT
,而替换为简单的5.0.0
在您对sed '
和"
的调用中使用${search}
代替${rep}
将不会进行插值。请尝试使用"
。正如评论部分所指出的,在这种情况下不要忘记qoute shell元字符。
sed s/1\\.5\\.1-SNAPSHOT/5.0.0/g
应该是您完成工作所需的整个脚本。
请注意,双\
可以在shell的正则表达式中转义所需的\
。
答案 1 :(得分:0)
$ cat tst.sh
search="1\.5\.1-SNAPSHOT"
rep="5.0.0"
sed "s/${search}/${rep}/g" file
$ ./tst.sh
<modelVersion>4.0.0</modelVersion>
<groupId>com.verio.oss.common</groupId>
<artifactId>oss-common-parent</artifactId>
<name>oss-common-parent</name>
<version>5.0.0</version>
<description>MarketPlace SuperPOM</description>
<modules>
<ui-server-svcs-version>5.0.0</ui-server-svcs-version>
<ui-client-svcs-version>5.0.0</ui-client-svcs-version>
<ui-widgets-version>5.0.0</ui-widgets-version>
<ossb-billing-version>5.0.0</ossb-billing-version>
<ossb-integration-version>5.0.0</ossb-integration-version>
<oss-ems-config-version>5.0.0</oss-ems-conf>
<properties>
<skipTests>true</skipTests>
<app-version>${project.parent.version}</app-version>
<app-build-date>09/27/2011</app-build-date>
<app-build-number>1</app-build-number>
<app-build-revision>101</app-build-rev>
当您对它感到满意时,请添加-i
arg。
请注意,这会在3411.5.1-SNAPSHOTISH
或类似的中间部分错误地匹配 - 如果这是一个问题,请为正则表达式添加边界,例如:search=">1\.5\.1-SNAPSHOT<"
并在替换中考虑它们