我有这个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做这种想法吗?你有任何代码片段吗?
非常感谢。
灵光
答案 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>