如何删除文件中第三次出现的模式,以及之后的模式

如何删除文件中第三次出现的模式,以及之后的模式

如何在文件中找到第三次出现的模式(注意:不在一行中)并删除包含该模式的行和n低于该值的行(例如,低于 5 行)。

例如,

COVER
fafjasfj
isfapifj
ajfsdaijf
COVER
oaijfeiahf
aasdf
fafadf
df
This is a COVER                                             *
efjafa                                                      *
aifaidfj                                                    *
aifhaidfh                                                   *
idfhaifh                                                    *
aidfhiadhf                                                  *
aifhaifh
iafaishf
jgsjg
fbsfgbf

我想删除包含该模式第三次出现的完整行COVER以及其下面的五行。这些行以*s 表示。(注意:*s 不是文件的一部分。

答案1

$ awk '$1=="COVER"{l++}l==3{l2++} l!=3 || l2>6' file
COVER
fafjasfj
isfapifj
ajfsdaijf
COVER
oaijfeiahf
aasdf
fafadf
df
aifhaifh
iafaishf
jgsjg
fbsfgbf

最后一条{print}语句不是必需的,因为默认情况下,awk在条件为真时打印当前行。

相关内容