如果一行包含模式并且后面跟着具有相同模式的另一行,则删除第一行

如果一行包含模式并且后面跟着具有相同模式的另一行,则删除第一行

我很抱歉...我的大脑冻结了,无法解决这个问题。我正在使用 sed 和模式空间,但我不断删除所有出现的包含模式的行。

我只想删除包含该模式的第一行,然后删除包含相同模式的另一行。

我正在使用的列表永远不会有超过两行包含相同模式的连续行

模式是“查询”

这是我的数据:

Query: A ANNUAL SERVICE FEE                                                                          
       SourceField:               EXP-ANNUAL:       SourceTable:               MASTER
Query: A ANNUAL SERVICE FEE                                                                          
Query: A Edie ACTIVE LNS                                                                             
       SourceField:               LOAN-NO:      SourceTable:               MASTER
Query: A Edie ACTIVE LNS                                                                             
       SourceField:               LO:           SourceTable:               MASTER

这就是我想要的样子:

Query: A ANNUAL SERVICE FEE                                                                          
       SourceField:               EXP-ANNUAL:       SourceTable:               MASTER                                                                      
Query: A Edie ACTIVE LNS                                                                             
       SourceField:               LOAN-NO:      SourceTable:               MASTER
Query: A Edie ACTIVE LNS                                                                             
       SourceField:               LO:           SourceTable:               MASTER 

答案1

sed '/^Query/{N;/\nQuery/D;}' file

在以 开头的行上Query,将下一行追加到模式空间。如果下一行以 开头Query,则删除第一行。

为了避免打印最后一行(如果最后一行匹配^Query):

sed -n '/^Query/{N;/\nQuery/D;};p' file

相关内容