我想改变
Example 1
<pre class="code">
bla bla
</pre>
Example 2
<pre>
bla bla
</pre>
到
Example 1
Example 2
所以我需要非贪婪的匹配和正则表达式。我很确定我不能使用sed
- 我可以使用哪些shell命令?
答案 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
(详细信息取决于您希望与文档的其余部分完全相同。)