Você poderia fazer algo ao longo destas linhas:
file=/some/file
newtext='sol { mass = 42, start = 9.2 }'
tac -- "$file" |
NEWTEXT=$newtext awk -v size="$(wc -c < "$file")" '
$1 ~ /^[^#]/ {
system("dd bs=1 seek=" size - length(footer) " conv=notrunc if=/dev/null")
printf "%s\n%s", ENVIRON["NEWTEXT"], footer
exit
}
{footer=$0 "\n" footer}' 1<> "$file"
Isso substitui o arquivo no lugar e armazena apenas o rodapé na memória. Ele precisa do comando não padrão GNU tac
. O arquivo tem que ser um arquivo de texto normal.