2012-04-02 13 views
0

私はbashでXMLを解析したいとxpathはそれを行うことができます。bashでは、「{}」をエスケープする方法は?

(サブ要素と "説明" の要素を取得するには、 "EM:するminVersion = 2.1")このようなクエリがうまく機能:

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) 

私は中括弧は、 "{}" エスケープする必要があるため、それはだと思うので、私は '{{..}}'、 '{...} ...どれも目を試してみましたemは動作します。

私は

答えて

6

これは実際にxpathユーティリティ事実以外のPerlとは何を持っていない

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> 

を探しているので、あなたが望む条件はXPathが数値比較を行うようにするには、番号のようなem:minVersion=2.1 2.1なぜならルックスと離れて取得している

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

です。しかし、それは任意の文字列では機能しません。