[英]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
John
Oct 1 19:00:12 2014
Multiple lines of text here
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.