ディレクトリ内のすべてのファイルから2つのタグ(htmlタグ)間のすべてのテキストを削除するコマンドまたはスクリプト?

ディレクトリ内のすべてのファイルから2つのタグ(htmlタグ)間のすべてのテキストを削除するコマンドまたはスクリプト?

削除する特定のタグを含むhtmlファイルでいっぱいのディレクトリがあります。たとえば、<p class="message"> </p>すべてのファイルから消えたいのですが、タグ内のテキストはファイルごとに異なります。

各ファイルのテキストが同じ場合

find . -type f -name '*.html' -exec sed -i'' -e 's/existing/replacement/g' {} +

古いテキストを新しいテキストに置き換えます。しかし、上記の例では、ラベル間のテキストが異なるため、これは機能しません。

指定された2つの文字列間のすべての項目を削除または置き換えることができる同様のコマンドまたはツールはありますか?

ベストアンサー1

HTMLタグはしばしば複数行にまたがるか、1行に複数のタグがある可能性があるため、perlファイルの内容全体が完全に処理され、*?貪欲でないバージョンが*最小限のコンテンツと一致するフルルックモードを使用できます。オープンタグとクローズタグの間に可能です。

オプション-iも非標準であり、これをサポートするオプションは、実際にはバックアップサフィックス(vs)がperl使用されていない場合のバリアントからコピーされます。-i-i ''

find . -name '*.html' -type f -exec perl -0777 -pi -e '
  s{<p class="message">.*?</p>}{ }gs' {} +

おすすめ記事