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$nauswerten kann Variable insedBefehl. In einfachen Anführungszeichen wird keine Interpolation durchgeführt. tacist eincatumgekehrt, sieheman 1 tac- die
{}insedsind da, um$nzu trennen &d(Wenn nicht, versucht die Shell, nicht existierende$ndzu 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'