bash脚本中的Xmlstarlet sel命令-删除标记

bash脚本中的Xmlstarlet sel命令-删除标记,xml,bash,xmlstarlet,Xml,Bash,Xmlstarlet,相关xml文件: <properties> <structure name="preference"> <structure name="cam1"> <property name="number" value="8"/> <property name="name" value="eddi"/> </structure>

相关xml文件:

<properties>
    <structure name="preference">
        <structure name="cam1">
            <property name="number" value="8"/>
            <property name="name" value="eddi"/>
        </structure>
        <structure name="cam2">
            <property name="number" value="2"/>
            <property name="name" value="franck"/>
        </structure>
    </structure>
</properties>
这是在终端中用于获取值的命令,在我这样编写的脚本中:

camera=`xmlstarlet sel -T -t -m \'/properties/structure[@name=\"preference\"]/structure[@name=\"cam1\"]/property[@name=\"number\"]/@value\' -v . -n $1`
然后尝试打印变量:

echo $camera
当然我没有打印我的结果“8”,我想我的反斜杠有问题。。。
是否有其他方法可以轻松删除该结构?

我无法100%确定您如何确定“8”来自何处。为什么提取要在删除中用作比较的值

下面是一个示例,当属性值为
number
的子
property
元素具有值为
8
value
属性时,将删除
structure
元素

希望这有帮助

#!/usr/bin/env bash

toDelete="8"
modXML=$(xmlstarlet ed -d "/properties/structure[@name='preference']/structure[property[@name='number']/@value=$toDelete]" $1)

echo $modXML

我不是100%确定你是如何确定“8”来自哪里的。为什么提取要在删除中用作比较的值

下面是一个示例,当属性值为
number
的子
property
元素具有值为
8
value
属性时,将删除
structure
元素

希望这有帮助

#!/usr/bin/env bash

toDelete="8"
modXML=$(xmlstarlet ed -d "/properties/structure[@name='preference']/structure[property[@name='number']/@value=$toDelete]" $1)

echo $modXML