我想编写一个脚本,从给定的 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>
我有两个问题。
sed
这可以用or来完成吗perl
?- 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>