Diferentes formas de remover apenas linhas vazias à direita:
printf %s\n "$(cat file)"|sponge file
tac file|awk /./,0|tac|sponge file
perl -0777 -pi -e 's/\n*$/\n/' file
gsed -i ':1;/^\n*$/{$d;N;b1}' file
bsdsed -i '' -e :1 -e '/^\n*$/{$d;N;b1' -e '}' file
As substituições de comandos removem todos os feeds de linha à direita, portanto, por exemplo, echo "$(printf 'a\n\n')b"
imprime ab
.
sponge
é de moreutils.
Substitua tac
por tail -r
no BSD.
perl -0777
define $_
para toda a entrada e -p
imprime $_
após cada linha. Veja man perlrun
.
:
define um rótulo, b
ramifica para um rótulo, $d
exclui o espaço padrão na última linha e N
acrescenta a próxima linha ao espaço padrão.
GNU sed
permite ponto e vírgula após :
e b
, mas POSIX e BSD sed
não. -i
funciona com GNU sed
mas não com BSD sed
e -i ''
funciona com BSD sed
mas não com GNU sed
.