Un sed drôle et simple et tac solution :
n=4
tac file.txt | sed "1,$n{d}" | tac
REMARQUE
- guillemets doubles
"sont nécessaires pour que le shell évalue le$nvariable ensedcommande. Entre guillemets simples, aucune interpolation ne sera effectuée. tacest uncatinversé, voirman 1 tac- le
{}ensedsont là pour séparer$n&d(sinon, le shell essaie d'interpoler$ndinexistant variables)
Extrait des répliques 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
Semble être ce que vous recherchez.
Je ne sais pas pour sed , mais cela peut être fait avec head :
head -n -2 myfile.txt
Si le codage en dur n est une option, vous pouvez utiliser des appels séquentiels à sed. Par exemple, pour supprimer les trois dernières lignes, supprimez trois fois la dernière ligne :
sed '$d' file | sed '$d' | sed '$d'