1. ホーム
  2. xml

[解決済み] grepを使ってxmlタグの中の情報を見つけるには?

2022-02-12 18:40:25

質問事項

私は、xmlファイルからいくつかの情報を抽出するbashスクリプトに取り組んでいます。私は grep を使用します。

必要な情報を見つけるために、私は実行します。

grep -oP "<title>(.*)</title>" temp.xml

マッチしたリストを取得し、これには <title> タグを使用します。

の中のテキストだけを含むリストを取得するにはどうすればよいですか? title タグを使用しますが がない場合 その title タグを grep を使って検索できますか?

どのように解決するのですか?

些細なXPath式で解決できるのに、なぜgrepを使いたがるのかがわからない。

//title/text()

XPath用のコマンドラインツールはたくさんあり、たいていOSにバンドルされています。

回答 Stack Overflowのこの質問 には、そのようなツールが多数掲載されています。

の問題点は grep は、テキスト処理のための汎用ツールであり、XMLの構造を一切意識していないということです。非常にシンプルなシナリオの場合、以下のようになります。 動作させる . ドキュメントが複雑だったり、一回きりの仕事ではなく、何ヶ月も何年も存続するようなスクリプトで使う場合は、結果的に残念なことになるかもしれませんね。

XPathは、文書内の異なる文脈で現れる似たような名前のタグの違いを簡単に見分けることができるようにします。

<article>
    <author>
        <name>Jon Doe</name>
        <title>Chief Editor</title>
    </author>
    <title>On the Benefits of grep</title>
    <publicationDate>2018-02-12</publicationDate>
    <text>blah blah blah</text>
</article>

このドキュメントで表現されている記事のタイトルを抽出し grep は、ここに掲載されている他の回答を使用した場合、失敗します。技術的には、必要なものを得るために正規表現を書くことはできますが、XPathを使えばもっと簡単です。

/article/title/text()

もし、扱う文書が些細なもので、書式も変わらないことがわかっている場合、あるいは一度きりの作業ですぐに結果を確認できるような場合は grep 他の方が説明されているように