如何在文件中每次出现时删除多行?


11

说我有这个857835线文件,其中包含以下内容:

a1
rubbish1
rubbish2
rubbish3
rubbish4
a1
rubbish5
rubbish6
rubbish7
rubbish8

我希望删除a1下一行(rubbish1rubbish5在本示例中)的所有出现。我该怎么做?

我尝试grep 'a1' -v -A1无济于事,而我的sed skillz并不是很好:}

这次我的Google-fu无法帮助我,请帮助!

Answers:


16

尝试:

sed -e '/^a1$/,+1d' "filename"

这意味着从/ ^ a1 $ /到下一行,删除

^和$确保您与整行匹配,因此隐藏的a1将不匹配。


6
你可能想^$在那场比赛,迫使匹配整行。
詹德,

@詹德:当然,更正
asoundmove '02

12

以下内容适用于非GNU sed,+1地址语法是GNU扩展):

sed -e '/^a1$/,/^/d' my_file >my_filtered_file

“删除从精确读取'a1'的行开始,到存在该行开头的下一行(即下一行)结束,”。

但是,它的扩展性远不如@asoundmove的答案,因为删除不同数量的行将采用完全不同的脚本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.