Wenn ich Versionskontrollsysteme verwende, ärgere ich mich über das Geräusch, wenn der Diff sagt: "Kein Zeilenumbruch am Ende der Datei".
Also habe ich mich gefragt: Wie kann man einen Zeilenumbruch am Ende einer Datei einfügen, um diese Meldungen loszuwerden?
sed -i -e '$a\' file
Und alternativ für OS X sed
:
sed -i '' -e '$a\' file
Dies fügt \n
am Ende der Datei ein, nur wenn die Datei nicht bereits mit einem Zeilenumbruch endet. Wenn Sie es also zweimal ausführen, wird es keinen weiteren Zeilenumbruch hinzufügen:
$ 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
Schauen Sie selbst:
$ echo -n foo > foo
$ cat foo
foo$
$ echo "" >> foo
$ cat foo
foo
also sollte echo "" >> noeol-file
den Zweck erfüllen. (Oder wollten Sie nach der Identifizierung dieser Dateien und ihrer Behebung fragen?)
edit das ""
von echo "" >> foo
entfernt (siehe @yuyichao's Kommentar)
edit2 das ""
wieder hinzugefügt (aber siehe @Keith Thompson's Kommentar)