【问题标题】:Multiline search with perl使用 perl 进行多行搜索
【发布时间】:2021-03-29 15:25:31
【问题描述】:

我已经尝试了很多在这里找到的解决方案,但我仍然无法在几行上进行 Perl 搜索。

我有一个index.htm 文件,里面有:

<!DOCTYPE html><html lang="en">
         
    
         
      
      <head>
        <meta charset="utf-8">
        <meta name="format-detection" content="telephone=no">  


    
    <script type="text/javascript" src="/company/rses/14rwer/contents/scripts/jquery.js"></script>
 

<h2 class="subhead">
<p>principal facts:</p>
....

所以我想删除以&lt;!DOCTYPE&gt; 开头的所有内容,直到元素&lt;h2 class="subhead"

我已经尝试过使用这样的m 选项(m 不是用于“多行”吗?):

find . -type f -name "index.htm" | xargs perl -i -pe 's/&lt;\!DOCTYPE html&gt;.*?&lt;h2 class="subhead//mg'

然后使用s 选项...

但我仍然无法获得此多行选择。

我可以得到一个这样的单行选择: find . -type f -name "index.htm" | xargs perl -i -pe 's/&lt;\!DOCTYPE html&gt;//mg' 但这不是我想要的,因为我想搜索和替换所有这些行。

【问题讨论】:

    标签: regex perl multiline


    【解决方案1】:

    /m 修饰符改变 ^$ 在正则表达式中的行为方式(在多行下,它们在每行的开始/结束处匹配),/s 改变 . 的行为方式(通常,@987654326 @ 不匹配换行符,但在 /s 下匹配)。

    但是perl -p 逐行读取输入,因此代码永远不会将整个输入作为单个字符串执行。使用-0777 将整个文件作为单个字符串读取:

    perl -0777  -pe 's/<\!DOCTYPE html>.*?<h2 class="subhead">//sg'
    

    【讨论】:

      猜你喜欢
      • 2012-03-13
      • 2019-07-03
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      • 2010-11-05
      • 2021-01-31
      相关资源
      最近更新 更多