2012-05-28 31 views
8

私はgrepを使用してxmlファイルの情報を見つけるためにLinuxシェルスクリプトに取り組んでいます。私はあまりにも重要ではないことを望むマックにいる。grepを使ってxmlタグ内の情報を見つける方法は?

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

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

は私がお返しにマッチのリストを取得し、これは<title>タグを含んでいます。

にはどうすればいいだけtitleタグ内の情報が、グレップを使用してなしtitleタグでリストを得ることができますか?

+1

で提案されているようにあなたは、XPathを使用してxgrepインストールすることができますか? – toniedzwiedz

+0

これはすばやいスクリプト作成の仕事でなければならない、私はそれに年齢を過ごしたくない。良いxpathコマンドラインツールをお勧めしますか? – Filype

+0

私はすでにxpath5.12がインストールされているようです。ただし、手動入力はありません。 – Filype

答えて

3

あなたは、このためにはgrepを使用したいと思い、なぜそれができる一方で、私は、見ることができません簡単なXPath式で解く:

//title/text() 

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

this question on Stack Overflowには、このようなツールが多数掲載されています。

grepの問題は、テキスト処理用の汎用ツールであり、XML構造を認識していないことです。非常に単純なシナリオでは、get it workingとすることができます。文書が複雑な場合や、1か月の仕事だけでなく数か年も生き残るスクリプトでこれを使用している場合は、結果を残念に感じるかもしれません。

XPathを使用すると、ドキュメント内のさまざまなコンテキストで表示される同様の名前のタグの違いを簡単に知ることができます。あなたはここに掲載他の答えのいずれかを使用した場合に失敗するgrepでこの文書によって表される記事のタイトルを抽出

<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> 

。あなたは技術的に正規表現を書いて、必要なものを得ることができますが、XPathではそれがずっと簡単です。

/article/title/text() 

あなたは些細な文書を扱っているとフォーマットが変更されないか、それはあなたがすぐに結果を確認することができます1時間の仕事だ場合は他の人が説明したように、あなたがgrepのために行くことができます知っている場合。

+0

XPathをサポートするコマンドの例は、xgrep(http://wohlberg.net/public/software/xml/xgrep)、xmlgrep(http://search.cpan.org/dist/XML-Twig/tools/xml_grep/xml_grep)です。 )またはsgrep(http://www.cs.helsinki.fi/u/jjaakkol/sgrep.html)を参照してください。 – Claudix

+2

「grepを使って」で終わる(明確な)質問で理解できなかったことはありますか? – Moonchild

+1

OPの前提とは対照的に、問題の核心に対処する質問に対する有益な回答を提供して、あなたはその答えを理解できませんでした。なぜあなたを悩ませているのですか? – toniedzwiedz

2

それが最善の解決策ではないですが、私はbashでXML libにを検索だろうが、あなたが行うことができます:

grep -oP "<title>(.*)</title>" temp.xml | cut -d ">" -f 2 | cut -d "<" -f 1 
+0

それも私の解決策です。 – Filype

14

すでにgrep -Pを使用しているので、その機能を使用しないでください。一般的なケースでは

grep -oP '(?<=<title>).*?(?=</title>)' 

は、XPathは正解ですが、おもちゃのシナリオについて、バージニア州はい、それを行うことができます。

+0

しかしgrep -Pは廃止されました – Bharat

+1

@Bharat廃止されましたか?あなたは参照を提供できますか? – tripleee

+0

私はそれが見つかりました[ここ](http://stackoverflow.com/questions/16658333/grep-p-no-longer-works-how-can-i-rewrite-my-searches) – Bharat

1

Tomの答えあなたの代わりにXPathを使用していないのはなぜ

man xgrep

関連する問題