在bash中,如何逃避“{}”?

时间:2012-04-02 07:20:13

标签: bash xpath

我想在bash中解析XML,而xpath也可以这样做。

(要获得带有子元素“em:minVersion = 2.1”的“Description”元素)这样的查询效果很好:

xpath install.rdf /RDF/Description/em:targetApplication/Description[em:minVersion=2.1]

但这不起作用:

xpath install.rdf /RDF/Description/em:targetApplication/Description[em:id={ec8030f7-c20a-464f-9b0e-13a3a9e97384}]

输出如下:

Query:
/RDF/Description/em:targetApplication/Description[em:id={{ec8030...
.......................................................^^^
Invalid query somewhere around here (I think)

我认为这是因为大括号“{}”需要转义,所以我尝试了'{{..}}','{...}'......它们都不起作用。

我根本不熟悉xpath或perl ......

1 个答案:

答案 0 :(得分:6)

尝试

xpath install.rdf '/RDF/Description/em:targetApplication/Description[em:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"]'

除了写入xpath实用程序的事实之外,这实际上与Perl没有任何关系。这完全取决于bashXPath

要阻止bash查看它,请将整个查询放在单引号中。

在XPath中,必须引用字符串(使用单引号或双引号)。在XPath表达式中使用双引号通常最简单,然后在bash周围放置单引号。

因为您正在搜索

<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>

你想要的条件是

em:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"

你正在逃避em:minVersion=2.1因为2.1看起来像一个数字,所以XPath进行了数字比较。但这不适用于任意字符串。