Linux 我需要使用sed查找一个匹配,并删除此匹配之前的2行和之后的3行

Linux 我需要使用sed查找一个匹配,并删除此匹配之前的2行和之后的3行,linux,shell,scripting,sed,Linux,Shell,Scripting,Sed,我需要使用“sed”查找一个匹配项,并删除该匹配项前的2行和该匹配项后的3行,然后打印输出,我如何才能做到这一点?如果文件不大,请尝试以下操作: 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 awk'NR==FNR{if($0~/matchWord/){for(i=NR-2;iFNR{

我需要使用“sed”查找一个匹配项,并删除该匹配项前的2行和该匹配项后的3行,然后打印输出,我如何才能做到这一点?

如果文件不大,请尝试以下操作:

    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
awk'NR==FNR{if($0~/matchWord/){for(i=NR-2;iFNR{if(!(a中的FNR))打印$0}文件

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

如果文件不是很大,请尝试以下操作:

    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
awk'NR==FNR{if($0~/matchWord/){for(i=NR-2;iFNR{if(!(a中的FNR))打印$0}文件

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

首先,你不想在sed中这样做。第二,你的问题是不合适的:如果第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 #!/bin/sed-nf 1{h;d;} H 2,5d G /^\([^\n]*\n\)\{2\}匹配/!P /^\([^\n]*\n\)\{2\}匹配/{ s/\n[^\n]*$// N } s/[^\n]*\n// H $p
注意:如果匹配发生在文件的最后3行中,则该行为不符合要求。这种情况留给(受虐狂)练习读者。

首先,你不想在sed中这样做。第二,你的问题是不合适的:如果第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 #!/bin/sed-nf 1{h;d;} H 2,5d G /^\([^\n]*\n\)\{2\}匹配/!P /^\([^\n]*\n\)\{2\}匹配/{ s/\n[^\n]*$// N } s/[^\n]*\n// H $p
注意:如果匹配发生在文件的最后3行中,这将不符合要求。这种情况留给(受虐狂)读者作为练习。

谢谢Kent,这是可行的,但是你知道如何使用sed来实现吗?谢谢Kent,这是可行的,但是你知道如何使用sed来实现吗?我发现我误解了你的问题(根据你的陈述,肯特的解决方案符合你的要求。)这会在比赛前删除整整一行两行,在比赛后删除整整一行三行。你想每次比赛总共删除6行吗?这实际上更容易。我发现我误解了你的问题(根据你的陈述,肯特的解决方案符合你的要求。)这将在比赛前两行删除一行,在比赛后三行删除一行。是否希望每次比赛总共删除6行?这实际上更简单。