Ich habe Dateien, die in einer oder mehreren Zeilenumbrüchen enden und nur in einer Zeile enden sollten. Wie kann ich das mit Bash / Unix / GNU-Tools machen?
Beispiel für eine fehlerhafte Datei:
1\n
\n
2\n
\n
\n
3\n
\n
\n
\n
Beispiel korrigierte Datei:
1\n
\n
2\n
\n
\n
3\n
Mit anderen Worten: Zwischen dem EOF und dem letzten Nicht-Newline-Zeichen der Datei sollte genau eine Newline stehen.
Referenzimplementierung
Dateiinhalt lesen, eine neue Zeile abschneiden, bis keine neuen Zeilen mehr vorhanden sind, zurückschreiben:
#! /bin/python
import sys
with open(sys.argv[1]) as infile:
lines = infile.read()
while lines.endswith("\n\n"):
lines = lines[:-1]
with open(sys.argv[2], 'w') as outfile:
for line in lines:
outfile.write(line)
Klarstellung: Natürlich sind Rohrleitungen erlaubt, wenn diese eleganter sind.