我有以下代码,该代码将删除带有模式的banana
行及其后的两行:
sed '/banana/I,+2 d' file
到目前为止,一切都很好!但我需要它来除去2行之前 banana
,但我不能用“减号”或任何(类似于得到它grep -v -B2 banana file
应该做的,但没有):
teresaejunior@localhost ~ > LC_ALL=C sed '-2,/banana/I d' file
sed: invalid option -- '2'
teresaejunior@localhost ~ > LC_ALL=C sed '/banana/I,-2 d' file
sed: -e expression #1, char 16: unexpected `,'
teresaejunior@localhost ~ > LC_ALL=C sed '/banana/I,2- d' file
sed: -e expression #1, char 17: unknown command: `-'
tac file | sed ... | tac
。:P
sed '/banana/,+2d' file
也可以
awk 'tolower($0)~/bandana/{print prev[!idx];print prev[idx]} {idx=!idx;prev[idx]=$0}' filein
由于这是评论而不是答案(已经有其他答案),因此我不会赘述过多,但关键是您始终拥有前两个记录首页上一页[0]与上一页[1]中,“新鲜”,这取决于迭代,但总是在prev[idx]
,所以当你打印,您在打印!idx
,然后idx
顺序。无论如何,请交替使用idx
并将当前记录放入中prev[idx]
。
awk '{l[m=NR]=$0}/banana/{for(i=NR-2;i<=NR;i++)delete l[i]}END{for(i=1;i<=m;i++)if(i in l)print l[i]}'
。这效率不高,所以这只是一个提示,而不是解决方案。