Vtipné a jednoduché sed a tac řešení:
n=4
tac file.txt | sed "1,$n{d}" | tac
POZNÁMKA
- dvojité uvozovky
"jsou potřeba, aby shell vyhodnotil$nproměnná vsedpříkaz. V jednoduchých uvozovkách nebude provedena žádná interpolace. tacjecatobráceně, vizman 1 tac{}vsedjsou zde k oddělení$n&d(pokud ne, shell se pokusí interpolovat neexistující$ndproměnná)
Ze sed jednovrstvých:
# 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
Zdá se, že je to to, co hledáte.
Nevím o sed , ale lze to provést pomocí head :
head -n -2 myfile.txt
Pokud je možnost pevného kódování n, můžete použít sekvenční volání sed. Chcete-li například odstranit poslední tři řádky, odstraňte poslední řádek třikrát:
sed '$d' file | sed '$d' | sed '$d'
Opravdu v Linuxu neexistuje žádný asynchronní blok I/O?
Odebrat sdílenou paměť posix, když se nepoužívá?