【发布时间】:2016-05-23 09:34:02
【问题描述】:
抱歉,标题很长/很奇怪,但我遇到了一个问题。我有这个 XML 文件:
</member>
<member>
<name>TransactionID</name>
<value><string>123456789123456</string></value>
</member>
<member>
<name>Number</name>
<value><string>765101293</string></value>
</member>
在那里,我必须用另一个文件 file2 中的另一个值替换“765101293”:
765003448
765885388
764034143
784478101
762568592
769765134
767200702
769550613
784914007
762333840
因此,XML 文件将在 file2 中的每个新字符串处发生变化。我不知道该怎么做。我正在考虑首先使用 awk 处理 file2,然后将管道输入 sed:
代码:
#! /bin/bash -f
var=`awk -F,"\n" '{print $0}' "$1"`
sed -i "/7[0-9]{8}/c\$var/" "$2"
所以,我想用 file2 中的数据更新我的 XML 文件 (Update.xml)。对于 file2 的第一行,我将不得不更新现有的 XML:而不是“765101293”,我将把 file2 > 765003448 的第一行放入。然后我将把 xml 移到其他地方,然后我将传递给file2 的下一行。对 file2 的所有行重复该过程。当我像这样运行我的脚本时使用的两个变量 $1 和 $2:./script.sh file2 Update.xml。
谁能帮帮我?
编辑:
这是我的完整 xml 文件:
<methodCall>
<methodName>UpdateOffer</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>offerID</name>
<value><i4>19</i4></value>
</member>
<member>
<name>startDate</name>
<value><dateTime.iso8601>20151028T14:11:00+0200</dateTime.iso8601></value>
</member>
<member>
<name>offerType</name>
<value><i4>0</i4></value>
</member>
<member>
<name>originHostName</name>
<value><string>TEST</string></value>
</member>
<member>
<name>originNodeType</name>
<value><string>Prepaid</string></value>
</member>
<member>
<name>originOperatorID</name>
<value><string>operator</string></value>
</member>
<member><name>originTimeStamp</name>
<value><dateTime.iso8601>20151028T14:16:36+0200</dateTime.iso8601></value>
</member>
<member>
<name>originTransactionID</name>
<value><string>123456789123456</string></value>
</member>
<member>
<name>subscriberNumber</name>
<value><string>765101293</string></value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
【问题讨论】:
-
为什么不使用 XML 解析器或者 XSLT?
-
不幸的是,要求是使用 sed/awk。