Sed:在比赛前打印2行

时间:2014-01-02 21:42:44

标签: sed

我需要在文件内匹配之前打印前两行(对于任何匹配) 如何制作?

谢谢

2 个答案:

答案 0 :(得分:3)

如果您不坚持使用sed,请使用

grep -B 2

答案 1 :(得分:3)

剧本:

  sed -n "1N;2N;/XXX[^\n]*$/{h;s/\n[^\n]*$//;p;g};N;D"

的工作原理如下:

  • 将第一个三个行读入模式空间1N;2N
  • 在最后一行搜索测试字符串XXX,如果找到:在保留空间中保存模式空间h,删除最后一行s,打印p,然后恢复已保存的字符串g
  • 将下一行输入附加到模式空间N
  • 从模式空间中删除第一行并重新启动周期D,注意1N;2N不再适用

另请参阅类似的SED: addressing two lines before match