How to remove multiple newlines at EOF?
From useful one-line scripts for sed.
# Delete all trailing blank lines at end of file (only).
sed -e :a -e '/^\n*$/{$d;N;};/\n$/ba' file
awk '/^$/ {nlstack=nlstack "\n";next;} {printf "%s",nlstack; nlstack=""; print;}' file
Since you already have answers with the more suitable tools sed and awk; you could take advantage of the fact that $(< file)
strips off trailing blank lines.
a=$(<file); printf '%s\n' "$a" > file
That cheap hack wouldn't work to remove trailing blank lines which may contain spaces or other non-printing characters, only to remove trailing empty lines. It also won't work if the file contains null bytes.
In shells other than bash and zsh, use $(cat file)
instead of $(<file)
.