パターンbanana
を持つ行とその後の2行を削除する次のコードがあります。
sed '/banana/I,+2 d' file
ここまでは順調ですね!しかし、私はそれを前 banana
に2行削除する必要がありますが、「マイナス記号」または何でも取得することはできません(何を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]とPREV [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]}'
。これは効率的ではないため、これは単なるヒントであり、解決策ではありません。