如何通过使用awk的gsub更新为带有替换字符串的xml文件?

时间:2019-05-28 09:44:50

标签: bash awk gsub

我一直致力于开发基于awk的脚本来解析pom.xml文件中父字段的版本号,并使用替换版本号更新同一文件中该父字段的版本。

注意

awk --version
GNU Awk 4.0.2
Copyright (C) 1989, 1991-2012 Free Software Foundation.

我已经开发了98%的脚本,我什至在屏幕上都能得到正确/所需的结果,但是我不知道如何将其作为一个完整的文件写入并附加版本更新。

我的脚本的输出

Artifact id : xmp_job_manager
Found Version : 18.1.1
Replaced Version : 3.700.20011

示例代码

    #Author : Vivin Neelankavil
    #upvote my post if you find it useful
    awk '/parent/, /\/parent/ {
    artifact[1]="xmps_job_manager"
    artifact[2]="xmp_job_manager"
    version[1]="3.700.200"
    version[2]="3.700.20011"
    if($1 ~ /^<artifactId/)
    {
            d=substr($1,13,(length($1)-25))
            print "Artifact id : " d
            for(j=1;j<=4;j++)       
            {
                    if(d==artifact[j])
                    {
                            getline
                            if($1 ~ /^<version/)
                            {       
                                    c=substr($1,10,(length($1)-19))
                                    print "Found Version : " c
                                    gsub('c',version[j],$1)
                                    k=substr($1,10,(length($1)-19))
                                    print "Replaced Version : " k
                            }
                    }
            }
    }
    }' pom.xml

我需要使用如下替换的版本号更新pom.xml文件

之前

    <name>Job Manager Implementation</name>
    <packaging>bundle</packaging>
    <description>Job Manager Implementation</description>
    <parent>
        <groupId>com.cisco.xmp</groupId>
        <artifactId>xmp_job_manager</artifactId>
        <version>18.1.1</version>
    </parent>
    <properties>
        <xmp.xmp_usermgmt.version>18.1.1</xmp.xmp_usermgmt.version>

之后

    <name>Job Manager Implementation</name>
    <packaging>bundle</packaging>
    <description>Job Manager Implementation</description>
    <parent>
        <groupId>com.cisco.xmp</groupId>
        <artifactId>xmp_job_manager</artifactId>
-->         <version>3.700.200</version>
    </parent>
    <properties>
        <xmp.xmp_usermgmt.version>18.1.1</xmp.xmp_usermgmt.version>

1 个答案:

答案 0 :(得分:0)

谢谢,我现在使用xmllint找到了解决方案...