などのコマンドラインツールを使用して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