Wer mit Linux, OS X beziehungsweise. macOS oder einem anderen unixoiden Betriebssystem arbeitet, kennt das Problem der Dateikonvertierung zwischen den Systemen, wenn er mit Windows-Anwendern Textdateien austauscht. Windows verwendet andere Zeilenenden als die vorgenannten Betriebssysteme. Es tut also Not, die Zeilenenden einfach und elegant zu konvertieren. Die folgenden zwei Shellskripten für die Bash nutzen sed zur Realisierung von unix2dos und dos2unix. Die Skripten sind als Filter implementiert, die ihre Ergebnisse auf der Standardausgabe ausgeben. In Verbindung mit einem weiteren Skript, welches ein Überschreiben der Quelldatei erlaubt, kann eine Datei leicht „in place“ modifiziert werden. Ein passendes Skript namens overwrite findet sich beispielsweise in „Der UNIX-Werkzeugkasten“ von Kernighan/Pike.
unix2dos:
1 2 3 4 |
#!/bin/bash # # konvertiert UNIX-Dateien nach DOS sed -e 's/$/^M/' "$@" |
Erläuterung: Mittels sed wird eine Ersetzung vorgenommen. Das Zeilenende, durch $
symbolisiert wird durch ^M
ersetzt. Diese spezielle Zeichenfolge ist in Vim mittels Ctrl+V Ctrl+M zu erzeugen. Das wird nun mit allen übergebenen Dateien getan, die an sed vorbeigeschleust werden.
dos2unix:
1 2 3 4 |
#!/bin/bash # # konvertiert DOS-Dateien nach UNIX sed -e 's/^M$//' "$@" |
Erläuterung: Dieses Skript macht das genaue Gegenteil des ersten Skripts. Es sucht die DOS-Zeilenenden und ersetzt sie durch nichts.
Das Ganze ist also nicht kompliziert. Weil es jedoch mühselig zu tippen ist, habe ich die zwei obigen Shell-Skripten dafür geschrieben. Im einfachsten Fall sieht eine Anwendung dann so aus:
1 |
$ dos2unix dateiname >dateiname.unix |
Karsten Brodmann