[sql] 줄 끝의 ‘^ M’문자

Unix 환경에서 특정 SQL 스크립트를 실행할 때 SQL 스크립트의 각 줄 끝에 ‘^ M’문자가 표시되어 명령 줄에 표시됩니다. SQL 스크립트가 원래 어떤 OS에서 생성되었는지 모르겠습니다.

이 문제의 원인은 무엇이며 어떻게 해결합니까?



답변

DOS / Windows 줄 끝 문자로 인해 발생합니다. Andy Whitfield가 말했듯이 Unix 명령 dos2unix는 문제를 해결하는 데 도움이 될 것입니다. 더 자세한 정보를 원하시면 해당 명령에 대한 매뉴얼 페이지를 읽어보십시오.


답변

vi다음을 실행하여 줄 끝을 수정합니다 .

:set fileformat=unix

:w


답변

원인은 Windows 기반 OS와 Unix 기반 OS가 줄 끝 마커를 저장하는 방법의 차이입니다.

Windows 기반 운영 체제는 DOS 유산 덕분에 줄 끝을 문자 쌍 0x0D0A(캐리지 리턴 + 줄 바꿈)으로 저장합니다. Unix 기반 운영 체제는 0x0A( 라인 피드 )를 사용합니다. ^M당신이보고있는이의 시각적 표현이다0x0D (A 캐리지 리턴 ).

dos2unix 가 도움이 될 것입니다. 또한 스크립트 소스를 ‘Unix 친화적’으로 조정해야 할 수도 있습니다.


답변

가장 쉬운 방법은 vi. 끔찍하게 들리지만 간단하고 대부분의 UNIX 환경에 이미 설치되어 있음을 알고 있습니다. ^ M은 Windows / DOS 환경의 새로운 행입니다.

명령 프롬프트에서 : $ vi filename

그런 다음 ” :“을 눌러 명령 모드로 들어갑니다.

전체적으로 모두 검색 및 바꾸기는 :%s/^M//gCtrl 키를 누른 상태에서 V를 누른 다음 M을 누르면 ^ M이 아무것도 바뀌지 않습니다.

그런 다음 작성하고 종료하려면 ” :wq“를 입력하십시오. 완료!


답변

dos2unix를 사용하여 ^ M을 제거하십시오.


답변

vi에서 :%s/^M//g

키를 ^M잡으 려면 다음 (Ctrl 키를 누른 상태에서 둘 다)를 누르면가 나타납니다. 이렇게하면 모든 발생을 찾아서 아무것도없는 것으로 바꿉니다.CTRLVM^M


답변

SQL 스크립트는 원래 Windows OS에서 생성되었습니다. ‘^ M’문자는 줄 끝 문자에 사용할 내용에 대해 Windows와 Unix가 서로 다른 아이디어를 가진 결과입니다. 이 문제를 해결하기 위해 명령 줄에서 perl을 사용할 수 있습니다.

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