特定のパスのXMLファイルを見つける

特定のパスのXMLファイルを見つける

私はXMLファイルを処理していますが、各ファイルの長さは数十行です。文字通り、何百ものファイルがディレクトリ構造に分散されています。はい、マゼントです。

この要素を含むファイルを見つける必要があります<foo><bar><boom><bang>。タグ<boom><bang>は他のタグの下で定義できます。フルパスを検索する必要があります。ただ閉じるタグやタグではありません。各タグの間には数十行があり、その間には異なるタグがあります。

<foo>
  <hello_world>
... 50 lines ....
  </hello_world>
  <bar>
    <giraffe>
... 50 lines ....
    </giraffe>
    <boom>
      <bang>Vital information here</bang>
    </boom>
  </bar>
</foo>

定義されたファイルを検索するためのエレガントな* nixメソッドは何ですか<foo><bar><boom><bang>私は現在、最新のDebian派生ディストリビューションを使用しています。

説得力から遠い現在の解決策は次のとおりです。

$ grep -rA 100 foo * | grep -A 100 bar | grep -A 100 boom | grep bang | grep -E 'foo|bar|boom|bang'

ベストアンサー1

パスが存在するかどうかをxmlstarlet試した後、ファイル名を出力できます。selif

find . -name '*.xml' -exec xmlstarlet sel -t -i '/foo/bar/boom/bang' -f -n {} +

おすすめ記事