我想使用shell变量搜索和添加新的xml标签。
使用以下命令,KVM_IF_LIST_FILE
将存储KVM
实例的所有接口名称[它将包含ex:eno1 eno2 eno3 eno4
]。
virsh domiflist $kvm_name|awk {'print $3'}|awk 'NR>2' >> $KVM_IF_LIST_FILE
现在我需要搜索<source dev='eno0/1/2/3' mode='bridge'/>
,如果找到上面的模式,需要添加新的xml节点
(<target dev=\'$kvm_name$cnt\'/>
)旁边的上述模式。我已经编写了下面的shell脚本,在这种情况下它不起作用。
cnt=0
for i in `cat $KVM_IF_LIST_FILE`
do
echo "Updating macvtap device names for $i"
sed -i.bak "/source dev='\'/a <target dev=\'$kvm_name$cnt\'/>" $XML_FILE
cnt=`expr $cnt + 1`
done
请告诉我如何修改上述脚本以执行上述搜索和替换。
答案 0 :(得分:2)
鉴于以下文件:
<root>
<prior/>
<source dev='foo'/>
<successor/>
</root>
...我们可以在匹配的<target>
元素之后附加一个新的source
元素,如下所示:
kvm_name=hello
cnt=5
xmlstarlet ed \
--var kvm "'$kvm_name$cnt'" \
-a '//source' -t elem -n target -v "$kvm_name$cnt" \
-i '//target' -t attr -n dev -v "$kvm_name$cnt" \
-d '//target[.=$kvm]/text()' <foo.xml
...产生以下输出:
<?xml version="1.0"?>
<root>
<prior/>
<source dev="foo"/>
<target dev="hello5"/>
<successor/>
</root>
答案 1 :(得分:0)