Windows->Linux Steuerungszeichen

f0x

Punk
Moin,
Wenn ich ein Script oder Programm auf meinem Windows Terminal in meinem Notepadd++ oder auch dem Windows Editor schreibe (oder auch nur öffne und abspeichere) und dann auf meinen BSD-Server oder meinen Linux Laptop übertrage und dort ausführe, gibt es massig fehler, da Windows aus irgendeinem Grund so dämlich Steuerungszeichen oder Escape Sequenzer (^M) mit einsetzt, die Unix/BSD/Linux nicht erkennt. Dann darf ich mühselig alle ^M entfernen.

1. Wie nennen sich diese nervigen Dinger richtig???

2. Wie kann ich unter Windows die entsprechenden Dateien bearbeiten und speichern - ohne das diese F*** Zeichen enthalten sind???

3. Gibt es im allgemeinen einen fixen Shell- oder vi-Befehl der alle ^M-Zeichen auf einen Schlag aus der entsprechenden Datei entfernt??? Wäre mir auch für andere Fälle wichtig! Parktisch so ein Suche und Ersetzen...

LG
f0x
 

oenone

Well-Known Member
das kommt daher, weil dein editor die datei mit windows-zeilenumbrüchen speichert. bei modernen editoren sollte man das einstellen können. vergiss daher notepad und guck dir die optionen von notepad++ an.
 

nakal

Anfänger
Wobei der vi(m)-Tip da blöd ist mit den regulären Ausdrücken. EInfacher ist folgendes zu machen:

Code:
:set fileformat=dos

oder

Code:
:set fileformat=unix

je nachdem in welche Richtung man es braucht.

Dann einfach abspeichern, fertig. Beim Laden muss man das nicht angeben, den vim erkennt den Modus automatisch.
 

Tron

Well-Known Member
Für die Tippfaulen:
Code:
:set fileformat
kann man auch verkürzen zu:
Code:
:set ff

Wobei der vi(m)-Tip da blöd ist mit den regulären Ausdrücken.
Der Tipp ist dann notwendig, wenn man keinen vim hat, sondern einen anderen vi-Klon, der fileformat nicht unterstützt oder wenn die Zeilenende inkonsistent sind, d.h. manche Zeilen enden auf CRLF und andere nur auf LF.
 

dettus

Bicycle User
:belehren:
ehrlich gesagt macht windows das ausnahmsweise mal richtig.

weil, unix haengt an das ende einer textzeile immer nur ein 0x0a zeichen an. was "line feed" bedeutet. die anweisung an den drucker, eine zeile weiter nach unten zu gehen.
bei windows kommt davor immer noch ein 0x0d. was "carriage return" bedeutet.

sprich, ein alter nadeldrucker wuerde bei einem unix-textfile einfach nur das rad weiterdrehen
Code:
was
    dann
         so
            aussieht.

aber durch das carriage return wird der cursor auch wieder an den anfang gesetzt.

Code:
was
dann
so
aussieht.
 

Crest

rm -rf /*
Teammitglied
Richtig und falsch gibt es dabei nicht. Der Grund ist da alte Druckwerke zwei Zeichen lang brauchten um an den Zeilenanfang in einer neuen Zeile zu kommen also hat man es auch zwei Zeichen verteilt.
 
Oben