Se tudo o que você quer fazer é adicionar texto à última linha, é muito fácil com o sed. Substitua $
(correspondência de padrão no final da linha) pelo texto que você deseja adicionar, somente nas linhas no intervalo $
(que significa a última linha).
sed '$ s/$/ and Linux/' <file >file.new &&
mv file.new file
que no Linux pode ser encurtado para
sed -i '$ s/$/ and Linux/' file
Se você quiser remover o último byte de um arquivo, o Linux (mais precisamente o GNU coreutils) oferece o truncate
comando, o que torna isso muito fácil.
truncate -s -1 file
Uma maneira POSIX de fazer isso é com dd
. Primeiro, determine o comprimento do arquivo e trunque-o para um byte a menos.
length=$(wc -c <file)
dd if=/dev/null of=file obs="$((length-1))" seek=1
Observe que ambos incondicionalmente truncam o último byte do arquivo. Você pode querer verificar se é uma nova linha primeiro:
length=$(wc -c <file)
if [ "$length" -ne 0 ] && [ -z "$(tail -c -1 <file)" ]; then
# The file ends with a newline or null
dd if=/dev/null of=file obs="$((length-1))" seek=1
fi