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

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

假设我有这个 857835 行文件,其中包含如下内容:

a1
rubbish1
rubbish2
rubbish3
rubbish4
a1
rubbish5
rubbish6
rubbish7
rubbish8

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

我尝试过grep 'a1' -v -A1但没有成功,而且我的 sed 技能也不是很好:}

我的 Google-fu 这次没能帮助我,请有人帮帮我!

答案1

尝试:

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

意思是从/^a1$/到下一行,删除

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

答案2

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

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

“从恰好读取‘a1’的行开始,到该行开头存在的下一行(即下一行)结束,删除。”

不过,它的可扩展性比 @asoundmove 的答案要差得多,因为删除不同数量的行将需要完全不同的脚本。

相关内容