我需要使用sed找到匹配并在此匹配前删除2行,然后删除3行

时间:2011-11-24 13:08:57

标签: linux shell scripting sed

我需要使用“sed”找到匹配并在此匹配前删除2行,然后删除3行,并打印输出,我该怎么做?

2 个答案:

答案 0 :(得分:2)

如果文件不大,请尝试:

    awk 'NR==FNR{if($0~/matchWord/){for(i=NR-2;i<=NR+3;i++){if(i!=NR)a[i]++}}}\
NR>FNR{if(!(FNR in a))print $0}' file file

我没有测试,但应该工作。

答案 1 :(得分:2)

首先,你不想在sed中这样做。 2,你提出的问题不对:如果你在5号线和8号线上有比赛,你会怎么做?第8行是否被删除,第6行被保留?假设这不是一个问题,这似乎做你想要的:

#!/bin/sed -nf

1{ h; d; } 
H
2,5d
g
/^\([^\n]*\n\)\{2\}match/!P
/^\([^\n]*\n\)\{2\}match/{
  s/\n[^\n]*$//
  N
}
s/[^\n]*\n//
h
$p

注意:如果匹配发生在文件的最后3行中,则表示不符合要求。这种情况留给了(受虐狂)读者的练习。