1

何万もの同じ要素を含む大きなXMLファイルがあります。

<rootElem>
    <fizz buzz="true">234</fizz>
    <fizz buzz="false">384</fizz>
    <fizz buzz="true"></fizz>
    <fizz buzz="true">39494</fizz>
    <fizz/>
</rootElem>

テキスト/本文データ(開始タグと終了タグの間の数字)を含まない要素をgrep出力するを実行したいと思います。<fizz>上記の例では、は数値データを含まないgrep3番目と5番目の要素に対して2行を生成します。<fizz>ファイル名はfizzes_20.xmlです。私は以下を実行しようとしましたが、役に立ちませんでした:

  • grep fizzes_20.xml "></>"
  • grep fizzes_20.xml "/>"

何か案は?前もって感謝します!

4

3 に答える 3

3

xmllintコマンドを使用して、空のノードのxpath式テストを実装できます。

$ xmllint --xpath "//fizz[not(text())]" data.xml 
<fizz buzz="true"/><fizz/>

アップデート

$ xmllint --version
xmllint: using libxml version 20901
   compiled with: Threads Tree Output Push Reader Patterns Writer SAXv1 FTP HTTP DTDValid HTML Legacy C14N Catalog XPath XPointer XInclude Iconv ISO8859X Unicode Regexps Automata Expr Schemas Schematron Modules Debug Zlib Lzma 
于 2013-03-21T02:14:48.740 に答える
1

このようなパターンで達成するのは非常に簡単です。

grep -E '<fizz/>|<fizz.*><' fizzes_20.xml
于 2013-03-21T01:39:09.553 に答える
0

次のコマンドを試してください。

egrep '<fizz.*(/>|></fizz>)' fizzes_20.xml

タグの<fizz開始とタイトルに.*一致し、任意の属性に一致し、括弧内の最後の部分は、自動終了タグまたは内容のないタグのいずれかに一致します。お役に立てれば!

于 2013-03-21T01:41:42.497 に答える