假设我有这个 857835 行文件,其中包含如下内容:
a1
rubbish1
rubbish2
rubbish3
rubbish4
a1
rubbish5
rubbish6
rubbish7
rubbish8
我希望删除所有出现的a1
和 下一行(rubbish1
在rubbish5
本例中)。我该怎么做?
我尝试过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 的答案要差得多,因为删除不同数量的行将需要完全不同的脚本。