[英]Adding new xml tag using sed in shell script
我想使用shell变量搜索并添加新的xml标记。
使用以下命令, KVM_IF_LIST_FILE
将存储KVM
实例的所有接口名称[它将包含在例如: 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
请让我知道如何修改以上脚本以进行上述搜索和替换。
给定以下文件:
<root>
<prior/>
<source dev='foo'/>
<successor/>
</root>
...我们可以在匹配的source
元素之后添加一个新的<target>
元素,如下所示:
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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.