2010-12-16 16 views
1

curlを使用しているページのソースを取得していて、特定のタグからテキストを抽出したい。HTMLからテキストを抽出するためのsedコマンド

テキストは固有のタグの間にある:の

curl -s "http://www.website.com" | sed 's|PATTERN|\1|' 
パターンは、私が試してみました、多くの正規表現パターンのうちの1つである

、1:

私がいたやった

href="http://www.website.com/some/unique/page.php?q=xyz">TEXT</a> 

href="http://www.website.com/some/unique/page.php?q=xyz">\(.*\)</a> 

しかし、何らかの理由で、私はそれを動作させることができませんでした。私は完全なページソースを取得するか、まったく使用しません(使用したパターンに応じて)。

助けていただければ幸いです。あなたがしたいのみ出力がTEXTであり、あなたはそれだけでは含むURLから出力されるようにしたい場合は

sed 's/^.*>\([^<]*\)<.*$/\1/' 

:ご希望の出力がちょうどTEXTで、これはあなたが与えた入力で動作しますと仮定すると、

+0

私は急いでいたので、おそらくユニークな「要素」を使用していたはずです。はい、ちょうどテキスト – nio

+0

URLに「ユニーク」という単語をキーしますか? – SiegeX

+0

ソースには、私が提供したテキスト以上のものがあります。私は上記のパターンのようにhref = "http://www.website.com/some/unique/page.php?q=xyz"のタグAから "TEXT"を抽出したいと思います。 – nio

答えて

2

sed -n '/http:.*\/unique\//s/^.*>\([^<]*\)<.*$/\1/p' 
+0

を試してみてください、それはどんなhtmlタグでしょうか?上記の私が提供した要素はどうですか? – nio

+0

デフォルトでは何も印刷しない '-n'キーと、置換された行を印刷するための修飾子' p'があります。 –

+0

@nioこれは、 'http:'の後に '/ unique /'が続く行にある場合にのみ 'TEXT'を出力します。それが十分でない場合は、エスケープされていない '//'の最初のペアの間に制限したいパターンを入れ、パターンテキストに '/'をエスケープしてください。残念ながら、どんな区切り文字を使うことができる 's'コマンドとは異なり、範囲フィールドは' // 'を使用しなければなりません – SiegeX

関連する問題