DSIW

Alles was interessant ist... (Linux, Programmierung, Datenschutz, Medien, uvm.)

Zeilenende bei Textdateien ändern

| Comments

Es kommt vor, dass man Dateien zwischen zwei Rechnern austauschen möchte, die nicht den gleichen Befehl für das Zeilenende benutzen. Durch eine einfache Umwandlung ist das doch möglich.

Zum Beispiel wird eine Datei von Linux nach Windows "kopiert". Der Windowsbenutzer möchte mit dem Standardeditor die Datei ansehen. Und was sieht er? Quasi nur Kaudawelsch, denn es sieht so aus, als würde die Datei nur aus einer Zeile bestehen. Dies kommt daher, dass unter Windows der Zeilenumbruch (CR) und der Wagenrücklauf (LF) getrennt behandelt werden. Unter Linux bzw. Unix wird LF benutzt, um beides gleichzeitig auszuführen. Dies hat historische Gründe. Früher, als man noch mit Schreibmaschine schrieb, benutzte man ein Rädchen, um die Rolle, wo das Papier eingespannt war, nach oben zu drehen, damit der Stempel in der nächsten Zeile Platz hatte. Danach musste noch ein Hebel bedient werden, der den Stempel an den Zeilenanfang schob und man mit dem Schreiben beginnen konnte. Allerdings gab es zu seiner Zeit auch eine andere Methode, die mit dem Betätigen eines Hebels die vertikale und horizontale Ausrichtung vornahm.

Umwandlung

Zur Umwandlung nutze ich das Programm sed.

Windows (CR,LF) nach Linux (LF)

linefeed-DOS2UNIX.shdownload
1
sed 's/^M$//' $\*

Linux (LF) nach Windows (CR,LF)

linefeed-UNIX2DOS.shdownload
1
sed 's/$'"/`echo \r`/" $\*

Beispiel

Datei unix.txt soll in windows.txt mit den entsprechenden Zeilenumbrüchen umgewandelt werden:

1
linefeed-UNIX2DOS.sh unix.txt > windows.txt

Beide Skripte sind in meinem Repository veröffentlicht.

Comments