2011
15.02

Wer von uns der regelmässig oder hauptsächlich mit Linux arbeitet kennt sie schon nicht, diese nervigen kleinen ^M am Zeilenende so manch einer Text Datei?

Es reicht an dieser Stelle wohl, wenn ich sage das Windows Standardmässig mit CRLF als Zeilenumbruch arbeitet, Linux und OSX aber «nur» mit LF. Weitere Hintergründe dazu sind in der wikipedia (de, en), zu finden.

Lösung 1:

Man ist sowieso gerade in dem Editor unter Linux: vim (wikipedia: de, en) und hat so etwas vor sich.

Da kann man jetzt ganz einfach: «:%s/^M//g» eingeben, natürlich ohne die Guillemets, drückt auf die Return (Enter) Taste drücken, schon sind die Windows Zeilenumbrüche wie durch Geisterhand weg.

Das ^M kann man mit der Tastenkombination Ctrl+V, Ctrl+M erzeugen.
Also Ctrl Taste drücken und gedrückt halten dann V drücken, dann M drücken jetzt die Ctrl Taste wieder los lassen.

Info: Es ist auch möglich, dass die Control (Ctrl) Taste auf deiner Tastatur Steuerung (Strg) heisst.

Lösung 2:

Man nutzt einen hübschen kleinen perl (wikipedia de, en) einzeiler.
perl -p -i -e "s/\r\n$/\n/g" datei1.txt datei2.txt … datein.txt

Wenn die Bash die Bash nicht findet.

Wenn ein Windows Nutzer ein Shell Script erstellt jedoch aber vergisst, mit einem Linux üblichen Zeilenumbruch zu speichern kann es zu folgendem Szenario kommen.

Wenn ein Aufruf von ./datei.sh folgende Meldung ausspuckt:

-bash: ./datei.sh: /bin/bash!: bad interpreter: No such file or directory

Auch wenn file datei.sh meint es sei eine «Bourne-Again shell script text executable» liegt es an einem ^M hinter der Shebang (wikipedia: de, en).

Die lautet dann: #!/bin/bash^M statt #!/bin/bash was natürlich nicht funktionieren kann.

Sonstige Links:

Tages Anzeiger: Guillemets ohne Fisimatenten

Zum Schluss

Hoffe ich, mit diesem Beitrag Irgendjemandem geholfen zu haben. 🙂

Kein Kommentar

Kommentieren

Dein Kommentar