Sed Ruby on Rails日志文件的多行正则表达式
我使用的是Ruby on Rails日志文件,该文件类似于以下示例:Sed Ruby on Rails日志文件的多行正则表达式,sed,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/header
[...]
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)
这可能适用于您(GNU-sed):
更好的语法:
sed -n '/Started GET/{h;d;};/Completed 200 OK/{H;g;s/\n/; /p;}' file
我想这更像是grep的例子
grep“^Started”^Completed”文件
,然后删除新行。在一些有线场景中,我使用grep
获得两行Started
。我想这更像是sed的工作。但是我不是100%确定。sed
用于流编辑器,用于过滤和转换文本
,而grep
用于打印与模式匹配的行
。考虑到您的示例输入,对我来说,使用grep
更有意义,但请使用更具代表性的输入进行更新,以便我们可以一起猜测什么是最好的。我改进了示例。现在有3个GET,但结果应该只包含2个GET。有没有办法知道哪个开始了,哪个完成了?+1;在OSX上完成这项工作所需要的就是用终止每个{…}
块中的最后一个命令代码>太:sed-n'/startedget/{h;d;}/已完成200个OK/{H;g;s/\n/;/p;}文件
sed -n '/Started GET/{h;d;};/Completed 200 OK/{H;g;s/\n/; /p;}' file