繁体   English   中英

PERL:匹配多种模式

[英]PERL: Matching multiple patterns

我有一段看起来像这样的文字

 Log Message(500).
    'Time': 1412207847
    'Name': John
    'blah some text
    'blah 2': some text
    'Priority': 5
    'Header':   Oct  1 19:00:12 2014  
    'Message':  Multiple lines of text here

我正在尝试提取名称,标题和消息。 我已经获得了提取标头和消息的方法,但是现在也很难获得它的名称。

这是我如何获得标题和消息

   my ($header, $message) = /
                    ^ \s+ Log[ ]Message .* \n
                    \s+ 'Header': \s+ (\S.*) \n
                    \s+ 'Message': \s+ (\S.*) \n \n $
            /xms;

这就是我试图得到的名称的方法,但是它不起作用。

my ($name, $header, $message) = /
                    ^ \s+ Log[ ]Message .* \n     # many lines
                    \s* 'Name': \s+ (\S.*) \n
                    \s+ 'Header': \s+ (\S.*) \n
                    \s+ 'Message': \s+ (\S.*) \n \n $
            /xms;

编辑:我只想获取值。 所以我要它回来

John
Oct  1 19:00:12 2014
Multiple lines of text here

一次读取整个文件:

$ perl -0ne '
    print $1, $2, $3, $4 if
        /
            \047 Name    \047:\s*(.*?\n).*?
            \047 Header  \047:\s*(.*?\n).*?
            \047 Message \047:\s*(.*)
        /sx
' file

或者使用命名的反向引用和HASH slice:

$ perl -0ne '
    print @+{qw/Name Header Message/} if 
    /
        \047 Name    \047:\s*(?<Name>    .*?\n).*?
        \047 Header  \047:\s*(?<Header>  .*?\n).*?
        \047 Message \047:\s*(?<Message> .*?\n)
    /sx
' file

OUTPUT:

John
Oct  1 19:00:12 2014  
Multiple lines of text here

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM