web-dev-qa-db-ja.com

Sed HTMLファイルからタグを削除

Sedコマンドを使用して、bashスクリプトでHTMLからすべてのタグを削除する必要があります。これで試した

sed -r 's/[\<][\/]?[a-zA-Z0-9\=\"\-\#\.\& ]+[\/]?[\>]//g' $1

そしてこれは

sed -r 's/[\<][\/]?[.]*[\/]?[\\]?[\>]//g' $1

しかし、私はまだ何か、何か提案がありませんか?

16
michste93

多くの HTMLからテキストへのコンバーターのいずれかを使用できます 、可能であればPerl正規表現を使用します_<.+?>_またはsedでなければならない場合は_<[^>]*>_を使用します

_sed -e 's/<[^>]*>//g' file.html
_

エラーの余地がない場合は、代わりにHTMLパーサーを使用してください。例えば。要素が2行にまたがる場合

_<div
>Lorem ipsum</div>
_

この正規表現は機能しません。


この正規表現は、3つの部分で構成されています_<_、_[^>]*_、_>_

  • _<_を開くための検索
  • ゼロ個以上の文字_*_が続きます。これらは終了__>_ではありません
    _[...]_は 文字クラス で、_^_で始まる場合、文字を探しますnotクラス内
  • 最後に_>_を閉じることを探します

単純な正規表現_<.*>_は機能しません。これは、可能な限り最長の一致、つまり入力行で最後に閉じる_>_を検索するためです。たとえば、入力行に複数のタグがある場合

_<name>Olaf</name> answers questions.
_

になります

質問に答えます。

の代わりに

オラフは質問に答えます。

詳細な説明については、 スターとプラスの繰り返し 、特にセクション 気をつけろ! および以下も参照してください。

59
Olaf Dietsche