如何读取和打印行中的多个字符串出现在Ruby中

时间:2017-06-05 19:22:33

标签: ruby-on-rails ruby rubygems

我有一个包含以下格式内容的日志文件:

[28/Feb/2017] 00007bd2 7d194700 - ERROR: ws_common: 
[28/Feb/2017] 00007bd2 7d194700 - ERROR: ESI: getResponse: failed 
[28/Feb/2017] 00007bd2 DOWN- [] ws_common: 

我想找到并打印包含" DOWN"等关键字的行,以及消息在日志文件中显示的时间。

我在UNIX中这样做了:

SomeVariable =`cat $filename| grep "$DD/$MTH/$YR:$HR:$MINM" | grep DOWN | wc -l

但我似乎无法在Ruby中做到这一点。这将返回所有行以及行号:

File.foreach("#{filename}").with_index do |line, line_num|

  if File.open("#{filename}") { |f| f.each.find { |line| line.include?("#
          {DAY}/#{MTH}/#{YR}:#{HR}:#{MINM}" && "down") }  }

    puts "#{line_num}: #{line} "
  end
end

以上面的文件为例,我想从中得到的输出是:

3 [28 / Feb / 2017] 00007bd2 DOWN- [] ws_common:

" 3"是第三行。

1 个答案:

答案 0 :(得分:3)

  

我在UNIX中这样做了:

 SomeVariable =`cat $filename| grep "$DD/$MTH/$YR:$HR:$MINM" | grep DOWN | wc -l

这里几乎是一样的。这将打印出DOWN的所有行。

puts File.foreach(filename).grep(/DOWN/)
# >> [28/Feb/2017] 00007bd2 DOWN- 

我不确定您是否希望 grep 获取时间戳,或者您只想知道DOWN事件的时间戳。如果是后者,你可以在这里(线条全部打印)。如果它是前者,那么实施起来应该不会太难,因为你已经掌握了这种新技术。