SO に毎日投稿されているように: HTML を正規表現で処理することはできません。正規表現を使用して XML と HTML を解析するのが難しい理由の例をいくつか挙げていただけますか?
基本的な正規表現を備えた sed のように制限されたツールの場合、これは 2 倍になります。
すべてのリンクがまったく同じ形式であるなど、入力の種類が非常に限られている場合は、可能かもしれません。その場合、その形式の例を投稿する必要があります。しかし、一般的な HTML ページでは、それはできません。
あなたの例を与えられたETA:最も単純なレベルでは、各URLはすでに独自の行にあるため、適切に見えるものを選択して、不要なビットを捨てることができます:
#!/bin/sed -f
s/^<td><a href="\(.*\)">.*<\/a><\/td>$/\1/p
d
ただし、これにより URL が HTML エンコードされた形式のままになることに注意してください。このファイルを生成したスクリプトがその URL を正しく HTML エンコードしている場合、lt/gt/quot/amp エンティティ参照のインスタンスをプレーンな文字形式 '<>"&' に戻す必要があります。遭遇する可能性が高いのは &/amp だけです。これは実際、URL で非常に一般的です。
しかし!発生した可能性のある HTML エンコーディングはこれだけではありません。eacute (IRI があるので有効) や数値文字参照 (10 進数と 16 進数の両方) など、他の HTML エンティティ参照がそこにある可能性があります。Unicode を含む文字のエンコードには 200 万もの潜在的な形式があります... sed でそれぞれを個別に置き換えることは、退屈な大規模な作業になります。
ジェネレーター スクリプトがそれらのいずれも出力しないことがわかっている場合は、おそらくそれを回避できますが、HTML パーサーは依然として最適です。(または、整形式の XHTML であることがわかっている場合は、最新の言語の標準ライブラリに組み込まれている、より単純な XML パーサーを使用できます。)