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$n
variable ensed
dominio. En comillas simples, no se realizará ninguna interpolación. tac
es uncat
al revés, verman 1 tac
- el
{}
ensed
están ahí para separar$n
&d
(si no, el shell intenta interpolar un$nd
inexistente 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'