这是输入:
aaa
bbb
ccc
ddd
eee
fff
我想要什么?做某事像“sed”/ ccc /,/(eee)/ d“但也删除”bbb“行(在”ccc“之前) 所以输出是:
aaa
fff
任何想法?
答案 0 :(得分:1)
这可能适合你(GNU sed):
sed ':a;$!{N;/\nccc/!{P;D};/\neee/!ba;d}' file
答案 1 :(得分:0)
如果你对awk没事,那应该这样做:
$ awk '/ccc/,/eee/{if(i!=1){i=1;x="";}next}{if (x)print x;x=$0;}END{print x}' file
aaa
fff
在上述情况下打印每一行。使用awk完成正常范围过滤。但是,在范围过滤器中,重置变量x,以便不打印范围之前的前一个记录。
<强>更新强>:
sed解决方案:
$ sed '${x;p;};/ccc/,/eee/{/ccc/{s/.*//;x;};d;};1{h;d;};x;/^$/d;' file
答案 2 :(得分:0)
你可以用一个简单的2遍方法做到这一点,第一步确定要删除的行,第二遍只打印未标记删除的行:
awk '/ccc/,/eee/{d[NR]=d[NR-1]=1} NR!=FNR && !d[FNR]' file file