Tauschgeschäfte
tr, dos2unix
Alternative Konvertierungskünstler
Ebenso leicht funktioniert das Hin- und Herkonvertieren zwischen Linux und Windows mit den beiden Programmen dos2unix und unix2dos. Die Ziffer "2" im Namen steht dabei jeweils für "to" (wie englisch "two") – die Befehle heißen also ausgesprochen "DOS to Unix" und "Unix to DOS". Um eine Windows-Textdatei für Linux fit zu machen, genügt der Aufruf:
$ dos2unix -n wintext linuxtext dos2unix: converting file wintext to file linuxtext in UNIX format …
Zum Einsatz kommt hier der Parameter -n. Er sorgt dafür, dass Sie neben der Eingabedatei auch die neue Ausgabedatei angeben können. Die Manpage verrät weitere nützliche Tipps und Tricks: Die Option -k erhält die ursprünglichen Zeitstempel, -o schreibt alle die Änderungen direkt in die Originaldatei. Mit unix2dos geht es auf die gleiche Weise in die andere Richtung:
unix2dos -n linuxtext wintext
Auf einigen Systemen bilden die beiden Helfer symbolische Links zu den Programmen fromdos respektive todos. Die Programme weisen eine leicht abweichende Syntax und andere Parameter auf. Hier sollten Sie beispielsweise die Option -b nutzen, die für ein Backup der Originaldatei sorgt, auch wenn Sie nicht in eine neue Datei umleiten. Merken Sie sich am Besten auch den Parameter -a, der bei fromdos alle Carriage Returns entfernt (und nicht nur die, welche einem Line Feed vorangehen). Verwenden Sie die Option -a beim Befehl todos, konvertiert sie alle Line Feeds in CR-LF-Paare. Standard wäre dagegen, nur jene Line Feeds zu ersetzen, die noch kein Carriage Return vorweg besitzen.
Die beiden Befehle für dos2unix und unix2dos aus dem vorangehenden Beispiel können also z. B. so aussehen:
cat wintext | fromdos -a > linuxtext cat linuxtext | todos -a > wintext
Gut kombiniert
Seine ganze Stärke spielt tr in Kombination mit anderen Kommandos auf der Shell aus. Finden sich beispielsweise jede Menge Dateien mit Leerzeichen im Namen auf Ihrer Platte, und Sie möchten diese Blanks gerne in Unterstriche ändern, dann erledigen Sie das schnell mit einer for-Schleife, dem Befehl mv und tr:
$ for i in *; do mv -v "$i" `echo $i | tr ' ' '_'`; done `datei mit leerzeichen' -> `datei_mit_leerzeichen' `datei mit leerzeichen 2' -> `datei_mit_leerzeichen_2'
Im Klartext übersetzt heißt das: Für alle Dateien im aktuellen Verzeichnis mache Folgendes: Verschiebe diese für den Benutzer sichtbar in Dateien, deren Namen das Ergebnis der tr-Tauschaktion sind.
Glossar
Zeilenumbruch
Die Syntax für Zeilenumbrüche auf dem Computer wurde der Funktionsweise von Schreibmaschinen nachempfunden. Es gibt ein Steuerzeichen für den Zeilenvorschub (engl. "Line Feed") und eines für den Wagenrücklauf (engl. "Carriage Return"). Auf den verschiedenen Betriebssystemen sind die Zeilenumbrüche unterschiedlich definiert: Während unter Linux ein schlichtes Line Feed (\n = "new line") den Umbruch markiert, sieht DOS/Windows zusätzlich ein Carriage Return (\r = "return") vor.
Infos
[1] Artikel zu sed: Heike Jurzik, "Ersetz Dich!", LinuxUser 11/2002, S. 80 ff., http://www.linux-user.de/ausgabe/2002/11/080-sed/



