Ein lustiger und einfacher sed
und tac
Lösung :
n=4
tac file.txt | sed "1,$n{d}" | tac
HINWEIS
- doppelte Anführungszeichen
"
werden benötigt, damit die Shell die$n
auswerten kann Variable insed
Befehl. In einfachen Anführungszeichen wird keine Interpolation durchgeführt. tac
ist eincat
umgekehrt, sieheman 1 tac
- die
{}
insed
sind da, um$n
zu trennen &d
(Wenn nicht, versucht die Shell, nicht existierende$nd
zu interpolieren Variable)
Aus den sed-Einzeilern:
# delete the last 10 lines of a file
sed -e :a -e '$d;N;2,10ba' -e 'P;D' # method 1
sed -n -e :a -e '1,10!{P;N;D;};N;ba' # method 2
Scheint das zu sein, wonach Sie suchen.
Ich weiß nichts über sed
, aber es kann mit head
gemacht werden :
head -n -2 myfile.txt
Wenn Hardcoding n eine Option ist, können Sie sequentielle Aufrufe von sed verwenden. Um beispielsweise die letzten drei Zeilen zu löschen, löschen Sie die letzte Zeile dreimal:
sed '$d' file | sed '$d' | sed '$d'