n番目からファイルの最後まで削除

n番目からファイルの最後まで削除

などのコマンドラインツールを使用してn番目のパターンが発生した後からファイルの終わりまでコンテンツを削除するにはどうすればよいですかsed?たとえば、次の
3 番目の項目を削除します。foo

something
foo1
maybe something else
foo2
maybe not
foo3 -this line and anything after is gone- 
I'm not here

$sed '/magic/'

望ましい結果:

something
foo1
maybe something else
foo2
maybe not

同じことを行いますが、3番目foo

ベストアンサー1

予約された回線なし:

awk -v n=3 '/foo/{n--}; n > 0'

行を維持する:

awk -v n=3 'n > 0; /foo/{n--}'

3番目の項目を見つけたら、すぐに終了して読み取りを中止するように少し改善したい場合がありますfoo

awk -v n=3 '/foo/{n--; if (!n) exit}; {print}' # not-keep
awk -v n=3 '{print}; /foo/{n--; if (!n) exit}' # keep

sedもっと面倒です。 fooの発生は、予約されたスペースの文字数だけ維持する必要があります。たとえば、次のようになります。

維持する:

sed '
  /foo/{
    x;s/^/x/
    /x\{3\}/{
      x;q
    }
    x
  }'

保管されていません:

sed -ne '/foo/{x;s/^/x/;/x\{3\}/q;x;}' -e p

おすすめ記事