Zeilenumbruch
Der Zeilenumbruch (engl. end of line, End-of-Line / EOL) bezeichnet die Stelle, an der ein Text von einer Zeile in die nächste übergeht.
Es gibt verschiedene Systeme, um den Zeilenumbruch in einer Textdatei zu kodieren.
Betriebssystem | Abkürzung | Hex-Code | ASCII-Code | Escape- Sequenz |
Tastatur |
---|---|---|---|---|---|
Unix, Linux, Mac OS X | LF | 0x0a | 10 | \n | CTRL+J |
Windows, MS-DOS, OS/2, CP/M | CR LF | 0x0d 0x0a | 13 10 | \r\n | CTRL+M, CTRL+J |
Mac OS (bis Version 9), Apple II, Commodore | CR | 0x0d | 13 | \r | CTRL+M |
AIX OS, OS/390 | NEL | 15 | 21 |
Anmerkung: Das "^M" wird dabei durch Halten der CTRL-Taste und aufeinanderfolgendem Drücken der Tasten "V" und "M" erzeugt.
Beim Öffnen einer Textdatei in einem Editor fällt dieser Unterschied spätestens auf: Eine unter Windows erstellte Textdatei zeigt im vi beispielsweise am Ende jeder Zeile ein "^M"-Zeichen. Eine mögliche Lösung bieten die beiden Befehle dos2unix und unix2dos, welche Dateien von einem Format ins andere umwandeln können.
Unter einigen Linux-Distributionen kommen die beiden Befehle in jeweils eigenen Paketen daher; aktuelle Debian-Versionen liefern stattdessen das Paket "tofrodos" aus, das die beiden Programme fromdos und todos enthält. Hier weisen zwei symbolische Links von "/usr/bin/dos2unix" und "/usr/bin/unix2dos" auf die verwandten Befehle, sodass der Benutzer einerseits wie gewohnt mit dos2unix und unix2dos, aber auch mit fromdos und todos arbeiten kann. Die Programme leisten grundsätzlich dasselbe, an einigen Stellen weichen sie allerdings voneinander ab.
DOS-Zeilenumbrüche entfernen
Entweder das Programm dos2unix verwenden oder eine der folgenden Methoden versuchen.
sed 's/.$//' dosfile > unixfile # nimmt an, dass alle Zeilen mit CR/LF enden sed 's/^M$//' dosfile > unixfile # in bash/tcsh, zuerst CTRL+V drücken, dann CTRL+M sed 's/\x0D$//' dosfile > unixfile # gsed 3.02.80, but top script is easier
awk '{sub(/\r$/,"");print}' # nimmt an, dass jede Zeile mit CTRL+M endet
gawk -v BINMODE="w" '1' infile >outfile # funktioniert nur mit gawk, aber nicht mit anderen DOS-Fassungen von awk gemacht werden
tr -d \r < dosfile > unixfile # GNU tr version 1.22 oder höher tr -d '\015' < dosfile > unixfile # verwndet den Oktalwert für "\r" (siehe ASCII) tr -d '[\015\032]' < dosfile > unixfile # manchmal wird "^Z" an DOS-Dateien angehängt
vim -c ":set ff=unix" -c ":wq" file # Umwandlung mit vi vim -c "se ff=dos|x" file # Umwandlung mit vi
recode ibmpc..lat1 file # Umwandlung mit recode
echo -e "s/\r//g" > dos2unix.sed; sed -f dos2unix.sed < dosfile > unixfile
Macintosh-Zeilenumbrüche entfernen
tr '\r' '\n' < macfile > unixfile
recode mac:lat1 < macfile > unixfile # pinfo recode && recode -l | grep -i mac
awk '{ gsub("\r", "\n"); print $0;}' macfile > unixfile
perl -p -e 's/\r/\n/g' < macfile > unixfile
Weblinks
- Konvertierung auf der Shell (Verwandlung auf Befehl) (Linux-User.de)