2014-03-19 108 views
0

我on Rails的一个Ruby的工作日志文件,它看起来像下面的例子:多行正则表达式on Rails的Ruby的日志文件

[...] 
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) 
+0

这是更多的情况下'grep',我猜。 'grep“^开始\ | ^完成”文件“,然后删除新行。 – fedorqui

+0

我有一些有线的场景,我通过使用'grep'获得两行'Started GET'。我想这对于sed来说更是一份工作。但我不是100%肯定的。 – wintermeyer

+0

'sed'用于'流编辑器用于过滤和转换文本',而'grep'则用于'打印与模式相匹配的行'。根据您的示例输入,对于我来说,使用'grep'更合理,但请更新更具代表性的输入内容,以便我们可以一起猜测最佳结果。 – fedorqui

回答

2

这可能为你工作(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 
+1

+1;在OSX上完成这个工作所需的全部工作就是使用';'终止每个'{...}'块中的最后一个命令:'sed -n'/ Started GET/{h; d;};/Completed 200 OK/{H; g; s/\ n /;/p;}'文件' – mklement0