我有一个看起来像这样的文本块
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
答案 0 :(得分:2)
一次读取整个文件:
$ 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切片:
$ 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