将由线分隔的两条线转换为一条线

时间:2012-07-02 20:24:03

标签: shell sed awk

我正在尝试通过查看我的生产Rails日志文件来查找所有POST请求中发送的参数。现在我只是使用以下内容:

grep 'Started POST.*\/[fr]' log/production.log

这会显示POST何时发生,但不显示参数。我想要的是做一些事情:

  1. 当遇到上面的正则表达式
  2. 时,将该行存储在sed的保持缓冲区中
  3. 遇到“参数:”
  4. 时,打印保持缓冲区和当前行的内容

2 个答案:

答案 0 :(得分:2)

据我了解,您需要使用正则表达式和以下行显示行。 grep可以自行完成:

grep -A1 'Started POST.*\/[fr]' log/production.log

使用sed,它将如下所示:

sed -n '/Started POST.*\/[fr]/{N;p}' log/production.log

或者如果不是所有后续行都可能含有"参数"你只需要它们:

sed -n '/Started POST.*\/[fr]/{N;/Parameters/p}' log/production.log

答案 1 :(得分:2)

这应该做你想要的:

sed -n '/Started POST.*\/[fr]/h;/Parameters/{H;g;p;q}'

它保存第一行并打印它和包含“参数”的行。只会打印第一组线条。