Un divertido y sencillo sed y tac solución:
n=4
tac file.txt | sed "1,$n{d}" | tac
NOTA
- comillas dobles
"son necesarios para que el shell evalúe el$nvariable enseddominio. En comillas simples, no se realizará ninguna interpolación. taces uncatal revés, verman 1 tac- el
{}ensedestán ahí para separar$n&d(si no, el shell intenta interpolar un$ndinexistente variables)
De las frases ingeniosas de 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
Parece ser lo que estás buscando.
No sé sobre sed , pero se puede hacer con head :
head -n -2 myfile.txt
Si codificar n es una opción, puede usar llamadas secuenciales para sed. Por ejemplo, para eliminar las últimas tres líneas, elimine la última línea tres veces:
sed '$d' file | sed '$d' | sed '$d'