Perl和正则表达式-单行模式匹配



为什么不

perl -ne "print if /(<Conn)([S|s]+?)(>)/sg;" /path/to/file

<Connector port="PORT" protocol="HTTP/1.1" SSLEnabled="true"
           maxThreads="150" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS" />`

匹配

<Connector port="PORT" protocol="AJP/1.3" redirectPort="PORT" />

我需要做什么来匹配相同的正则表达式?

-n选项逐行读取文件,但是您可以通过取消定义输入行结束符来将一行更改为整个文件。这是使用local $/;完成的,或者使用命令行选项-0777,如下所示:

perl -0777ne 'print "$1n" while /(<Conn.+?>)/sg;' /path/to/file

它一次读取整个文件。如果这是一个问题,请尝试在命令行上将$/设置为>(因为您的模式总是以>结束)或-o076:

perl -076ne 'print "$1n" if /(<Conn.+?>)/sg;' /path/to/file

因为它是逐行运行的。在您的第一个数据中,$_将采用三个单独的值

  1. <Connector port="PORT" protocol="HTTP/1.1" SSLEnabled="true"
    
  2. maxThreads="150" scheme="https" secure="true"
    
  3. clientAuth="false" sslProtocol="TLS" />
    

,这些都不能单独匹配。

如果你想让它匹配,也许你可以试着把整个文件都吸进去。

my $whole_file = do { local $/; <> };

相关内容

  • 没有找到相关文章

最新更新