Sed:在匹配前打印两行

Sed:在匹配前打印两行,sed,Sed,我需要在文件中匹配之前打印前两行(对于任何匹配) 怎么做 谢谢如果您不坚持使用sed,请使用 grep -B 2 剧本: 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,请使用

grep -B 2
剧本:

  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上实现它?为什么需要
sed
?可以使用
awk
或更好的
grep-B
完成此脚本不适用于“file1”:AAA\n BBB\n CCC\n XXX,模式为“XXX”@alwaystudent:谢谢你的评论。我已经用GNU
sed
仔细检查了我的解决方案,它工作正常。您使用的是哪个版本的
sed
。@Joseph Quinsey:GNU-sed版本4.2.1