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$n
proměnná vsed
příkaz. V jednoduchých uvozovkách nebude provedena žádná interpolace. tac
jecat
obráceně, vizman 1 tac
{}
vsed
jsou zde k oddělení$n
&d
(pokud ne, shell se pokusí interpolovat neexistující$nd
promě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á?