15.3Text-Konverter (Zeichensatz und Zeilentrennung)

Dieser Abschnitt stellt die Kommandos recode, iconv, unix2dos und dos2unix vor. Sie dienen dazu, den Zeichensatz bzw. die Zeilentrennzeichen von reinen Textdateien zu ändern. Das ist dann erforderlich, wenn Sie Textdateien zwischen Systemen mit unterschiedlichen Zeichensätzen bzw. Textformatkonventionen austauschen.

recode führt eine Zeichensatzkonvertierung von Zeichensatz 1 nach Zeichensatz 2 durch. Das folgende Kommando konvertiert die DOS-Datei dosdat in eine Linux-Datei mit dem Latin-1-Zeichensatz:

user$ recode ibmpc..latin1 < dosdat > linuxdat

Wie das folgende Beispiel beweist, kann recode auch das Zeilentrennzeichen verändern. Das Kommando ersetzt in der Datei windowsdat alle Zeilenenden (CR plus LF, also Carriage Return und Line Feed) durch das unter Linux übliche Zeilenende (nur LF). Der eigentliche Zeichensatz wird nicht geändert. Die resultierende Datei wird in linuxdat gespeichert.

user$ recode latin1/cr-lf..latin1 < windowsdat > linuxdat

recode liest die im Zeichensatz Latin-1 codierte Textdatei latin1dat und speichert sie als UTF-8-Datei (Unicode):

user$ recode latin1..u8 < latin1dat > utf8dat

Eine populäre Alternative zu recode ist das Kommando iconv. Dieses Kommando ist allerdings nicht in der Lage, die Zeilentrennungszeichen zu verändern. Das folgende Beispiel erzeugt abermals aus einer Latin-1-codierten Textdatei eine entsprechende UTF-8-Datei:

user$ iconv -f latin1 -t utf-8 latin1dat > utf8dat

Die Kommandos dos2unix und unix2dos aus dem Paket dos2unix ändern die Zeilentrennungszeichen zwischen dem DOS/Windows-typischen Format (CR plus LF) und dem Unix/Linux-typischen Format (nur LF). Die Kommandos eignen sich nur für Textdateien mit Ein-Byte-Zeichensätzen (z.B. ASCII, Latin-1), nicht für Unicode-Dateien!

user$ dos2unix datei.txt