Kiedy uruchamiam określony skrypt SQL w środowiskach Unix, widzę znak „^ M” na końcu każdego wiersza skryptu SQL, który jest powtarzany w wierszu poleceń. Nie wiem, w którym systemie operacyjnym skrypt SQL został pierwotnie utworzony.
Co jest tego przyczyną i jak to naprawić?
sql
unix
newline
line-endings
os-dependent
Paul Reiners
źródło
źródło
brew install dos2unix
gdy masz zainstalowany homebrewNapraw zakończenia linii,
vi
wykonując następujące czynności::set fileformat=unix
:w
źródło
^M
s z jakiegoś powodu. Plik referencyjny:/etc/timidity/fluidr3_gm.cfg
.Przyczyną jest różnica między sposobem przechowywania znaczników końca linii przez system operacyjny oparty na systemie Windows i system operacyjny oparty na systemie Unix.
Systemy operacyjne oparte na systemie Windows, dzięki swojemu dziedzictwu w systemie DOS, przechowują koniec wiersza jako parę znaków -
0x0D0A
(powrót karetki + nowy wiersz). Systemy operacyjne oparte na Uniksie po prostu używają0x0A
( wysuw wiersza ). To,^M
co widzisz, jest wizualną reprezentacją0x0D
( powrotu karetki ).dos2unix pomoże w tym. Prawdopodobnie będziesz musiał także dostosować źródła skryptów, aby były „przyjazne dla Uniksa”.
źródło
^M
? Dlaczego „^”? Dlaczego „M”?Najłatwiej jest użyć
vi
.Wiem, że to brzmi okropnie, alejest proste i już zainstalowane w większości środowisk UNIX. ^ M to nowa linia ze środowiska Windows / DOS.z wiersza poleceń:
$ vi filename
Następnie naciśnij „
:
”, aby przejść do trybu poleceń.Wyszukaj i zamień wszystko Globalnie to
:%s/^M//g
„ Naciśnij i przytrzymaj klawisz Control, a następnie naciśnij V, a następnie M ”, co zastąpi ^ M niczym.Następnie, aby napisać i wyjść, wpisz „
:wq
” Gotowe!źródło
Spróbuj użyć dos2unix do usunięcia ^ M.
źródło
W vi wykonaj a
:%s/^M//g
Aby uzyskać
^M
przytrzymanie CTRLklawisza, naciśnij, Va następnie M(oba trzymając klawisz sterujący), a^M
pojawi się. Spowoduje to znalezienie wszystkich wystąpień i zastąpienie ich niczym.źródło
:%s/^M/\r/g
Skrypt SQL został pierwotnie utworzony w systemie operacyjnym Windows. Znaki „^ M” są wynikiem tego, że Windows i Unix mają różne pomysły na temat tego, czego użyć jako znaku końca linii. Możesz użyć perla w wierszu poleceń, aby to naprawić.
źródło
^ M jest zwykle powodowane przez znak nowej linii w systemie Windows i tłumaczone na Uniksa wygląda jak ^ M. Polecenie dos2unix powinno ładnie je usunąć
dos2unix [opcje] [-c convmode] [-o plik ...] [-n plik wyjściowy plik ...]
źródło
Sed jest jeszcze szerzej dostępny i może robić tego typu rzeczy także wtedy, gdy dos2unix nie jest zainstalowany
Możesz także spróbować tr:
Oto wyniki:
źródło
Aby zamienić znaki ^ M w edytorze vi użyj poniżej
otwórz plik tekstowy, powiedz t1.txt
Wejdź w tryb poleceń, naciskając
shift + :
następnie naciśnij klawisze, jak wspomniano
%s/^M/\r/g
źródło
Alternatywą dla
dos2unix
polecenia byłoby użycie standardowych narzędzi, takich jaksed
.Na przykład dos do unixa:
unix do zrobienia:
źródło
Możesz usunąć ^ M z plików bezpośrednio poleceniem sed, np .:
Jeśli jesteś zadowolony ze zmian, usuń pliki .bak:
źródło
Konwertuj końce linii DOS / Windows (\ r \ n) na końcówki linii Unix (\ n), z tr:
Napisz o zastępowaniu znaków nowej linii z wiersza poleceń Uniksa
źródło
od -a $file
przydaje się do eksplorowania tego typu pytań w Linuksie (podobnie jak dumphex w powyższym).źródło
W Perlu, jeśli nie chcesz ustawiać zmiennej $ / i używać chomp (), możesz również zrobić:
Moje dwa centy
źródło
Kolejne polecenie vi, które zrobi:
:%s/.$//
usuwa ostatni znak z każdego wiersza w pliku. Wadą tego polecenia wyszukiwania i zamiany jest to, że nie obchodzi go, jaki jest ostatni znak, więc uważaj, aby nie wywołać go dwukrotnie.źródło