XML文件 - 使用SED更改属性的值

时间:2014-01-16 16:57:35

标签: xml sed awk

我有这个xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
   <testsuite errors="0" failures="0" hostname="emulator-5554_tel_unknown_sdk" name="com.example.android.apis.tests.robotium" tests="3" time="4.4730" timestamp="Thu Jan 16 14:34:09 CET 2014">
      <properties>
         <property name="PROCESSOR_ARCHITECTURE" value="AMD64" />
         <property name="file.encoding.pkg" value="sun.io" />
      </properties>
   <testcase classname="android.test.AndroidTestCase" name="testAndroidTestCaseSetupProperly" time="0.1750" />
   </testsuite>
</testsuites>

我是sed命令的新手。我想修改testsuite元素的name属性。我想在其值前加上hostname属性的值。

我可以用sed做这种想法吗?你有任何代码片段吗?

非常感谢。

灵光

1 个答案:

答案 0 :(得分:1)

使用Gnu Awk版本4,您可以尝试类似:

gawk -f a.awk RS="^$" file.xml

其中a.awk是:

{
    n=split($0,a,/<testsuite [^>]*>/,s)
    printf "%s%s",s[0],a[1]
    for (i=1; i<n; i++) {
        m=split(s[i],b,/(name|hostname)="[^"]*"/,t)
        printf "%s%s",t[0],b[1]
        q=length(t[1])
        z=substr(t[1],11,q-11)
        q=length(t[2])
        w=substr(t[2],7,q-7)
        t[2]="name=\""z ":" w "\""
        printf "%s%s%s%s%s%s",t[1],b[2],t[2],b[3],t[3],a[i+1]
    }
    printf "%s", s[n]
}

输出:

<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
   <testsuite errors="0" failures="0" hostname="emulator-5554_tel_unknown_sdk" name="emulator-5554_tel_unknown_sdk:com.example.android.apis.tests.robotium" tests="3" time="4.4730" timestamp="Thu Jan 16 14:34:09 CET 2014">
      <properties>
         <property name="PROCESSOR_ARCHITECTURE" value="AMD64" />
         <property name="file.encoding.pkg" value="sun.io" />
      </properties>
   <testcase classname="android.test.AndroidTestCase" name="testAndroidTestCaseSetupProperly" time="0.1750" />
   </testsuite>
</testsuites>