How to use sed to remove the last n lines of a file
A funny & simple sed
and tac
solution :
n=4
tac file.txt | sed "1,$n{d}" | tac
NOTE
- double quotes
"
are needed for the shell to evaluate the$n
variable insed
command. In single quotes, no interpolate will be performed. tac
is acat
reversed, seeman 1 tac
- the
{}
insed
are there to separate$n
&d
(if not, the shell try to interpolate non existent$nd
variable)
From the sed one-liners:
# 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
Seems to be what you are looing for.
I don't know about sed
, but it can be done with head
:
head -n -2 myfile.txt
If hardcoding n is an option, you can use sequential calls to sed. For instance, to delete the last three lines, delete the last one line thrice:
sed '$d' file | sed '$d' | sed '$d'