为什么不
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
因为它是逐行运行的。在您的第一个数据中,$_将采用三个单独的值
<Connector port="PORT" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
,这些都不能单独匹配。
如果你想让它匹配,也许你可以试着把整个文件都吸进去。
my $whole_file = do { local $/; <> };