我希望使用 Perl 或 sed 命令删除当前文件夹中所有文件中多个 HTML 匹配行之前的所有内容。
这是当前文件夹中我的文件之一的样子:
<li>violet</li>
<p>red</p>
<p>blue</p>
<p>gray</p>
<li><a href="#part1">Part 1</a>
</li>
<h2>Part 1</h2>
<p>pink</p>
我试图在匹配这些 HTML 行之前删除所有内容(如您所见,其中可能包含空行):
<li><a href="#part1">Part 1</a>
</li>
所以最终编辑的文件将如下所示:
<h2>Part 1</h2>
<p>pink</p>
我发现 Perl 可以使用以下命令删除特定字符之前的所有内容:
perl -p -e 's/^.*?abc/abc/'
和 sed:
sed 's/[^abc]*\(abc.*\)/\1/'
但我无法将这些与 html 标签匹配。
如果有人有任何建议,那就太棒了!
答案1
我不会用正则表达式解析 HTML,但只是基于“在并包括之后打印内容<h2>
”,你可以这样做,
perl -nE'state $start ||= m?<h2>? and print' ./test
即使在 Perl 中你也不会使用正则表达式。你会用一些东西Mojo::DOM
做你想做的事,而不是正则表达式。