使用shell命令删除<pre>...</pre>块

时间:2018-06-03 13:56:27

标签: html regex shell perl

我想改变

Example 1 
<pre class="code">
bla bla 
</pre>
Example 2 
<pre>
bla bla 
</pre>

Example 1 
Example 2 

所以我需要非贪婪的匹配和正则表达式。我很确定我不能使用sed - 我可以使用哪些shell命令?

1 个答案:

答案 0 :(得分:3)

  

所以我需要非贪婪匹配正则表达式。

不是真的。假设<pre></pre>标记总是在一行上,没有评论或其他HTML标记,并且您不必担心无法使用HTML实体,您可以使用例如

perl -ne 'print unless m{^\s*<pre\b} .. m{^\s*</pre>}'

但使用真正的HTML解析器可能是个更好的主意:

perl -MHTML::Parser -e 'HTML::Parser->new(ignore_elements => ["pre"], default_h => [sub { print @_ }, "text"])->parse_file(*STDIN)' < input.html

(详细信息取决于您希望与文档的其余部分完全相同。)