Frage

Wenn ich einen bestimmten SQL-Skript in Unix-Umgebungen, die ich bin zu sehen, ein "^M " - Zeichen am Ende jeder Zeile des SQL Skripts, wie es auch für die Befehl-Linie.Ich weiß nicht, auf welchem Betriebssystem Sie das SQL-Skript ursprünglich erstellt wurde.

Was verursacht das und wie kann ich es beheben?

War es hilfreich?

Lösung

Sie wird verursacht durch das DOS - /Windows-Zeilenende-Zeichen.Wie Andy Whitfield sagte, den Unix-Befehl dos2unix wird helfen, das problem zu beheben.Wenn Sie weitere Informationen wünschen, Lesen Sie die man-Seiten für diesen Befehl.

Andere Tipps

Fix line endings in vi durch ausführen der folgenden:

:set fileformat=unix

:w

Die Ursache ist der Unterschied zwischen dem, wie eine Windows-basierte OS und Unix-basierte OS-store die end-of-line-Marker.

Windows-basierte Betriebssysteme, die Dank Ihrer DOS-Erbe, store eine end-of-line als ein paar Zeichen - 0x0D0A (carriage return + line feed).Unix-basierte Betriebssysteme einfach verwenden, 0x0A (a line feed).Die ^M Sie sehen eine visuelle Darstellung von 0x0D (a carriage return).

dos2unix wird helfen, mit diesem.Sie haben wahrscheinlich auch anpassen müssen, um die Quelle des scripts werden von Unix-friendly.

Der einfachste Weg ist die Verwendung vi. Ich weiß, das klingt schrecklich, aber seine einfache und bereits installierte auf den meisten UNIX-Umgebungen.Das ^M ist eine neue Linie von Windows - /DOS-Umgebung.

von der Eingabeaufforderung aus: $ vi filename

Dann drücken Sie ":"zu Befehl Modus.

Suchen und Ersetzen Sie alle Weltweit :%s/^M//g "Drücken und halten Sie control und drücken Sie dann V dann M"die Stelle ^M nichts.

Dann zu schreiben und zu beenden, geben Sie ":wq"Fertig!

Versuchen Sie es mit dos2unix ausziehen, den ^M.

In vi tun :%s/^M//g

, Um die ^M halten Sie die STRG Schlüssel, drücken Sie V dann M (Sowohl beim halten der Strg-Taste) und die ^M wird angezeigt.Diese findet alle vorkommen, und ersetzen Sie mit nichts.

Das SQL-Skript wurde ursprünglich auf einem Windows-Betriebssystem.Die '^M " - Zeichen sind ein Ergebnis von Windows-und Unix-verschiedene Vorstellungen darüber, was für ein end-of-line-Zeichen.Sie können perl auf der Kommandozeile, um dieses Problem zu beheben.

perl -pie 's/\r//g' filename.txt

Das ^M ist in der Regel verursacht durch die Windows-operator-Zeilenumbrüche enthalten, und übersetzt auf Unix-sieht aus wie ein ^M.Der Befehl dos2unix sollten, entfernen Sie diese schön

dos2unix [Optionen] [-c convmode] [-o file ...] [-n infile outfile ...]

C:\tmp\text>dos2unix hello.txt helloUNIX.txt

Sed ist noch überall erhältlich und Sie können tun, diese Art der Sache, auch wenn dos2unix ist nicht installiert

C:\tmp\text>sed s/\r// hello.txt > helloUNIX.txt  

Sie könnten auch versuchen, tr:

cat hello.txt | tr -d \r > helloUNIX2.txt  

Hier sind die Ergebnisse:

C:\tmp\text>dumphex hello.txt  
00000000h: 48 61 68 61 0D 0A 68 61 68 61 0D 0A 68 61 68 61 Haha..haha..haha  
00000010h: 0D 0A 0D 0A 68 61 68 61 0D 0A                   ....haha..  

C:\tmp\text>dumphex helloUNIX.txt  
00000000h: 48 61 68 61 0A 68 61 68 61 0A 68 61 68 61 0A 0A Haha.haha.haha..  
00000010h: 68 61 68 61 0A                                  haha.  

C:\tmp\text>dumphex helloUNIX2.txt  
00000000h: 48 61 68 61 0A 68 61 68 61 0A 68 61 68 61 0A 0A Haha.haha.haha..  
00000010h: 68 61 68 61 0A                                  haha.  

Zu ersetzen ^M-Zeichen im vi-editor unten

öffnen Sie die text-Datei sagen t1.txt

vi t1.txt

Geben Sie Befehl-Modus durch drücken shift + :

dann drücken Sie die Tasten wie erwähnt %s/^M/\r/g

in above ^M is not (shift + 6)M instead it is (ctrl + V)(ctrl + M)

Eine alternative zu dos2unix Befehl würde mit standard-Dienstprogramme wie sed.

Für Beispiel, dos zu unix:

sed 's/\r$//' dos.txt > unix.txt

unix zu dos:

sed 's/$/\r/' unix.txt > dos.txt

Sie können entfernen ^M aus direkt auf die Dateien über die sed-Befehl, z.B.:

sed -i'.bak' s/\r//g *.*

Wenn Sie mit den änderungen zufrieden sind, entfernen Sie die .bak-Dateien:

rm -v *.bak

Konvertieren von DOS - /Windows - ( ) Zeilenenden zu Unix ( ) Zeile enden, mit tr:

tr '\r\n' '\n' < dosFile.txt > unixFile.txt

Post zum ersetzen von Zeilenumbrüchen aus der Unix-Kommandozeile

od -a $file sinnvoll ist zu erforschen, diese Art von Frage auf Linux (ähnlich dumphex im oben).

In Perl, wenn Sie nicht wollen, um die $/ Variablen und chomp() können Sie auch tun:

$var =~ /\r\n//g;

Meine zwei Cent

Ein weiterer vi-Befehl, tun wirst: :%s/.$// Dies entfernt das Letzte Zeichen jeder Zeile in der Datei.Der Nachteil dieses suchen-und-ersetzen-Befehl ist, dass es egal ist, was das Letzte Zeichen ist, also seien Sie vorsichtig, nicht zu nennen es zweimal.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top