Un divertente e semplice sed
e tac
soluzione :
n=4
tac file.txt | sed "1,$n{d}" | tac
NOTA
- virgolette doppie
"
sono necessari alla shell per valutare il$n
variabile insed
comando. Tra virgolette singole, non verrà eseguita alcuna interpolazione. tac
è uncat
al contrario, vediman 1 tac
- il
{}
insed
sono lì per separare$n
&d
(in caso contrario, la shell tenta di interpolare$nd
inesistente variabile)
Dalle battute di sed:
# 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
Sembra essere quello che stai cercando.
Non so di sed
, ma può essere fatto con head
:
head -n -2 myfile.txt
Se l'hardcoding n è un'opzione, puoi utilizzare chiamate sequenziali a sed. Ad esempio, per eliminare le ultime tre righe, elimina l'ultima riga tre volte:
sed '$d' file | sed '$d' | sed '$d'