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$n
variable ensed
commande. Entre guillemets simples, aucune interpolation ne sera effectuée. tac
est uncat
inversé, voirman 1 tac
- le
{}
ensed
sont là pour séparer$n
&d
(sinon, le shell essaie d'interpoler$nd
inexistant 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'