用于从 HTML 文件中删除某些 span 元素的脚本

用于从 HTML 文件中删除某些 span 元素的脚本

我想编写一个脚本,从给定的 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>

我有两个问题。

  1. sed这可以用or来完成吗perl
  2. linux中有没有一个工具可以轻松编辑这样的HTML文档?

答案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>

相关内容