代码之家  ›  专栏  ›  技术社区  ›  Scott C Wilson Joachim Kiørbye Bertelsen

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

  •  -2
  • Scott C Wilson Joachim Kiørbye Bertelsen  · 技术社区  · 6 年前

    我想换衣服

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

    只是

    Example 1 
    Example 2 
    

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

    1 回复  |  直到 6 年前
        1
  •  3
  •   melpomene    6 年前

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

    不是真的。假设 <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
    

    (详细信息取决于您希望对文档的其余部分执行什么操作。)