Ich denke, Ihre beste Wette ist, Perl:
perl -0pe 's/\n\Z//' days.txt
Die -0
Ursachen die gesamte Datei als eine große Zeichenfolge zu behandeln Perl. Die -p
sagt ihm, diese Zeichenfolge wieder nach dem Ausführen des Programms darauf zu drucken. Und die -e
sagt "hier ist das Programm zu laufen".
Der reguläre Ausdruck \n\Z
entspricht einer neuen Zeile, aber nur, wenn es das letzte Zeichen in dieser Zeichenfolge ist. Und s/\n\Z//
sagt, eine solche Newline durch nichts zu ersetzen, löschen Sie es.
Der obige Befehl gibt die neue Version der Datei aus, Sie können jedoch die vorhandene ändern, indem Sie die Option -i
("in-place") hinzufügen, optional mit einem Suffix, das zum Benennen einer Sicherungskopie verwendet wird die Datei, bevor es zu ändern:
perl -i.bak -0pe 's/\n\Z//' days.txt
Diese Lösung ist sicher, dass, wenn das letzte Zeichen nicht ein newline, wird es nicht berührt werden. Die anderen Lösungen, die einfach das letzte Byte entfernen, egal was eine solche Datei beschädigt.
möglich Duplikat (http [Wie ich eine neue Zeile löschen kann, wenn es das letzte Zeichen in einer Datei ist?]: // Stackoverflow.com/questions/1654021/how-can-i-löschen-ein-newline-wenn-es-ist-das-letzte-zeichen-in-einer-datei) –