Zeilenumbruch

Aus Mikiwiki
(Weitergeleitet von Zeilenende)
Wechseln zu: Navigation, Suche

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

Erstellen einer Datei "lfcr.pcl"

Erstellen der Datei "lfcr.pcl", die ein Zeilenende- und ein Wagenrücklaufzeichen (line feed / LF, carriage return / CR) enthält. Nach Absetzen des Befehls "cat" muss erst die Escape-Taste, dann as Zeichen "&", dann "k", dann "2", dann "G" und zum Schluss die Return-Taste gedrückt werden. "cat" kann dadurch durch "CTRL+C" verlassen werden.

$ cat > /usr/bin/lfcr.pcl
ESC & k 2 G RETURN
CTRL+C

FAQ

Zeichen durch Zeilenumbruch ersetzen

Im vi z. B. ersetzen des Leerzeichens durch einen Zeilenumbruch. Anstelle von "x" sind die Tastenkombinationen "CTRL+V" und gleich anschliessend "CTRL+M" zu drücken (also nicht die Zeichen "^" und "M" eingeben!).

:% s/x/^M/g

Weblinks

Herausgeber Sprache Webseitentitel Anmerkungen
country DE.gif Wikipedia ger Zeilenumbruchwbm Enzyklopädischer Artikel
country DE.gif Linux User ger Konvertierung auf der Shellwbm