HTML から URI を抜き出す


これは awk を使っている時に参考になる質問かな。
以下のような HTML の場合に拡張子が ext のものの URI を抜き出すというものです。

<html>
 <body>
 <!--
 some messy code with many tags like
  <a href="http://www.somesite.com/somepath/somefile.ext">link</a>
 -->
 </body>
</html>

Tiago Peczenyj の回答が分かりやすいです。徐々に解読しているような方法です。
最初に RS を決めます。

$ awk -v RS='[<>]' '/^a href=/' data
a href="http://www.somesite.com/somepath/somefile.ext"

次に FS を指定します。

$ awk -v RS='[<>]' -F\" '/^a href=/{ print $2 }' data
http://www.somesite.com/somepath/somefile.ext

最後に拡張子で判定しています。

$ awk -v RS='[<>]' -F\" '/^a href=/ && $2 ~ /ext$/ { print $2 }' data
http://www.somesite.com/somepath/somefile.ext

また lynx を使うというものもあります。日本なら w3m でしょうか。

 $ lynx --dump a.html

   [1]link

References

   1. http://www.somesite.com/somepath/somefile.ext

このようにして一度テキストにしてしまった後に awk で処理をすれば楽だという話のようです。HTML を Plain Text にする場合や、逆に HTML をパースしたいときにも w3m は役に立ってくれますね。