Sed:在匹配之前打印 2 行

Giu*_*ato 2 sed

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

谢谢

Jos*_*sey 5

剧本:

  sed -n "1N;2N;/XXX[^\n]*$/{h;s/\n[^\n]*$//;p;g};N;D"
Run Code Online (Sandbox Code Playgroud)

工作原理如下:

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

另请参阅类似的SED:在匹配之前寻址两行