多行解析

时间:2015-08-20 09:28:16

标签: ruby regex parsing fileparsing

我正在解析日志文件:

]

每个日志都以时间戳开头。

我正在考虑单独解析日志。我想过用时间戳和取物来分隔它们,所以我写了一个正则表达式:

2015-07-15 12:59:39 +0530 [ERROR] index=abc host=abc
2015-07-15 12:59:39 +0530 [WARNING] index=def
host=def
2015-07-15 12:59:39 +0530 [INFO] index=ghi host=ghi

但是,这只会获取第一个日志:

text = File.open('logs.txt').read
log = text[/^\d{4}\-\d{2}\-\d{2}(.*?)^\d{4}\-\d{2}\-\d{2}/m, ].to_s
.gsub(/\s/m,' ').strip.split(' ')
puts log #Prints 2015-07-15 12:59:39 +0530 [ERROR] index=abc host=abc

而不是其余的。

  1. 如何在第一个日志之后继续获取日志?
  2. 有没有比我的方法更好的方法来解决这个问题?
  3. 谢谢。

2 个答案:

答案 0 :(得分:1)

  1. 使用scan代替[]
  2. 逐行阅读,而不是一次读取整个日志文件。

答案 1 :(得分:0)

您的格式是否正确,日志可以跨越多行?如果它们被换行符分隔,您可以使用

log = text.lines