web-dev-qa-db-ja.com

Sed 2つのタグ間でテキストを抽出する方法

このコマンドが機能しない理由を理解しようとしています。

sed -n -e '/<a href=\(.*\)>/,/<\/a>/p' text.html

Text.htmlには、次のようなものがあります...

<somestupidstuff> <a href='teste'> teste </a> </somestupidstuff>

必要な出力は次のとおりです。

<a href='teste'> teste </a>

しかし、私が得るものは:

<somestupidstuff> <a href='teste'> teste </a> </somestupidstuff>

多分私は正規表現を完全に理解していません。

ケースにgrepを使用する方がはるかに簡単です。例えば。こちらです:

grep -o '<a href=[^<]*<\/a>'

<の間に<a href>..</a>がある場合は、代わりにこれを試してみてください。

grep -o '<a href=.*<\/a>'

ただし、同じ文字列に複数の<a href=...</a>オカレンスがある文字列では、予期しないデータが返される可能性があることに注意してください。

/pattern1/,/pattern2/ppattern1の行からpattern2の行までのすべての行を印刷するようにsedに指示するため、sedは機能しません(パターンのある行を含む)。

この問題はsedでも解決できる可能性がありますが、それはsomestupidstuffの内容によって異なります(たとえば、すべての場合で同じかどうかなど)。

3
rush