HTMLファイルから特定の範囲要素を削除するスクリプト

HTMLファイルから特定の範囲要素を削除するスクリプト

特定のHTMLファイルから特定の範囲クラスのすべてのインスタンスを完全に削除するスクリプトを作成したいと思います。

"foo"たとえば、ファイルからスクリプトを実行するためにスパンクラスが必要ない場合

<html>
  <head>
    <title>hello world</title>
  </head>
  <body>
lorem ipsum
<span class="foo"> STUFF </span>
alpha beta <span class="foo"> MORE 
STUFF</span>
  </body>
</html>

生産しなければならない

<html>
  <head>
    <title>hello world</title>
  </head>
  <body>
lorem ipsum
alpha beta 
  </body>
</html>

2つの質問があります。

  1. sedまたはを使用してこれを実行できますかperl
  2. これらのHTML文書を簡単に編集できるツールはLinuxにありますか?

答え1

Perlは改行文字でもこれを行うことができます。

これをファイルにダンプします(example.htmlと呼びます)。

<p>Here is some <span>foo bar</span> example text.</p>
<p>Some text even <span>foo
bar</span> spans across line breaks.</p>

次に、次のことを試してください。

$ perl -0777 -pe 's/<span.*?<\/span>//gs' example.html
<p>Here is some  example text.</p>
<p>Some text even  spans across line breaks.</p>

答え2

HTMLが正しい形式のXMLの場合は、XML処理ツールを使用できます(たとえば、xmlstarletファイルが次のようになるとしますoriginal.html)。

xmlstarlet ed -O -d '/html//span[@class = "foo"]' original.html

出力

<html>
  <head>
    <title>hello world</title>
  </head>
  <body>
lorem ipsum

alpha beta
  </body>
</html>

関連情報