Ruby on Rails日志文件的多行正则表达式

时间:2014-03-19 10:16:43

标签: sed

我使用Ruby on Rails日志文件,如下例所示:

[...]
Started GET "/staff/sign_in" for 22.22.22.22 at 2014-02-16 03:39:32 -0800
Processing by Staffer::SessionsController#new as */*
  Rendered layouts/_compatible_browsers.html.erb (0.9ms)
  Rendered layouts/headers/_guest.html.erb (0.6ms)
Cache digest for layouts/social_media_footer_link.html: bc9b2db49cc435f550be0f0dffe79548
Cache digest for layouts/_footer.html: 87dcaa136f1edad80dd5eb5a4b5dde82
Read fragment views/staffer_footer/87dcaa136f1edad80dd5eb5a4b5dde82/87dcaa136f1edad80dd5eb5a4b5dde82 (4.6ms)
  Rendered layouts/_footer.html.erb (7.4ms)
Completed 200 OK in 527ms (Views: 445.2ms | ActiveRecord: 1.0ms)
Started GET "/staff/sign_in" for 22.22.22.22 at 2014-02-16 03:49:32 -0800
Started GET "/staff/sign_in" for 22.22.22.22 at 2014-02-16 03:59:32 -0800
Processing by Staffer::SessionsController#new as */*
  Rendered layouts/_compatible_browsers.html.erb (0.9ms)
  Rendered layouts/headers/_guest.html.erb (0.6ms)
Cache digest for layouts/social_media_footer_link.html: bc9b2db49cc435f550be0f0dffe79548
Read fragment views/staffer_footer/87dcaa136f1edad80dd5eb5a4b5dde82/87dcaa136f1edad80dd5eb5a4b5dde82 (4.6ms)
  Rendered layouts/_footer.html.erb (7.4ms)
Completed 200 OK in 527ms (Views: 445.2ms | ActiveRecord: 1.0ms)
[...]

如何告诉sed为该示例提供以下输出?

Started GET "/staff/sign_in" for 22.22.22.22 at 2014-02-16 03:39:32 -0800; Completed 200 OK in 527ms (Views: 445.2ms | ActiveRecord: 1.0ms)
Started GET "/staff/sign_in" for 22.22.22.22 at 2014-02-16 03:59:32 -0800; Completed 200 OK in 527ms (Views: 445.2ms | ActiveRecord: 1.0ms)

1 个答案:

答案 0 :(得分:3)

这可能适合你(GNU sed):

sed -n '/Started GET/{h;d};/Completed 200 OK/{H;g;s/\n/; /p}' file

更好的语法:

sed -n '/Started GET/{h;d;};/Completed 200 OK/{H;g;s/\n/; /p;}' file