Utilizando sistemas de controlo de versões, fico aborrecido com o ruído quando a diff diz "Nenhuma nova linha no fim do ficheiro".
Por isso, estava a pensar: Como adicionar uma nova linha no final de um ficheiro para se livrar dessas mensagens?
sed -i -e '$a\' file
E, em alternativa, para OS X sed
:
sed -i '' -e '$a\' file
Isto acrescenta `\n' no final do ficheiro somente se não terminar já com uma nova linha. Portanto, se o executar duas vezes, não adicionará outra linha nova:
$ cd "$(mktemp -d)"
$ printf foo > test.txt
$ sed -e '$a\' test.txt > test-with-eol.txt
$ diff test*
1c1
< foo
\ No newline at end of file
---
> foo
$ echo $?
1
$ sed -e '$a\' test-with-eol.txt > test-still-with-one-eol.txt
$ diff test-with-eol.txt test-still-with-one-eol.txt
$ echo $?
0
Dê uma vista de olhos:
$ echo -n foo > foo
$ cat foo
foo$
$ echo "" >> foo
$ cat foo
foo
portanto echo "" >> noeol-file
deve fazer o truque. (Ou pretendia pedir para identificar estes ficheiros e corrigi-los?)
**edit* removeu o ""
de echo "" >> foo
(ver @yuyichao's comment)
edit2* adicionou o ""
novamente (mas* ver @Keith Thompson's comment)