it-swarm-ko.tech

줄 끝의 '^ M'문자

유닉스 환경에서 특정 SQL 스크립트를 실행하면 SQL 스크립트의 각 줄 끝에 명령 줄에 에코되는 '^ M'문자가 표시됩니다. SQL 스크립트가 처음 작성된 OS를 모르겠습니다.

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

97
Paul Reiners

DOS/Windows 줄 끝 문자로 인해 발생합니다. Andy Whitfield가 말했듯이 유닉스 명령 dos2unix는 문제를 해결하는 데 도움이됩니다. 자세한 정보가 필요하면 해당 명령에 대한 매뉴얼 페이지를 읽으십시오.

77
Thomas Owens

다음을 실행하여 vi에서 줄 끝을 수정하십시오.

:set fileformat=unix

:w

74
Tim Abell

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

Windows 기반 운영 체제는 DOS 헤리티지 덕분에 줄 끝을 한 쌍의 문자-0x0D0A (캐리지 리턴 + 줄 바꿈)로 저장합니다. 유닉스 기반 운영 체제는 0x0A ( line feed ) 만 사용합니다. 표시되는 ^M0x0D의 시각적 표현입니다 ( 캐리지 리턴 ).

dos2unix 도움이 될 것입니다. 스크립트 소스를 '유닉스 친화적'으로 조정해야 할 수도 있습니다.

39
ColinYounger

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

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

그런 다음 ": "명령 모드로 이동합니다.

전체 검색 및 바꾸기는 :%s/^M//g "제어를 길게 누른 다음 V를 누른 다음 M을 누름"^ M을 아무것도 대체하지 않습니다.

그런 다음 ":wq "완료!

24
Bernie Perez

^ s를 제거하기 위해 dos2unix를 사용하십시오.

13
Andy Whitfield

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

^M 잡고 CTRL 키 누름 V 그때 M (Control 키를 누른 상태)와 ^M 나타날거야. 이것은 모든 발생을 찾아서 아무것도 아닌 것으로 대체합니다.

9
dogbane

SQL 스크립트는 원래 Windows OS에서 작성되었습니다. '^ M'문자는 Windows와 Unix가 EOL (End-of-Line) 문자에 사용할 항목에 대해 다른 아이디어를 갖는 결과입니다. 명령 행에서 Perl을 사용하여이 문제를 해결할 수 있습니다.

Perl -pie 's/\r//g' filename.txt
8
Bill the Lizard

^ M은 일반적으로 Windows 연산자 줄 바꿈으로 인해 발생하며 Unix로 번역 된 것은 ^ M과 같습니다. dos2unix 명령은 잘 제거해야합니다

dos2unix [옵션] [-c convmode] [-o 파일 ...] [-n 파일 출력 파일 ...]

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

Sed는 더 널리 사용 가능하며 dos2unix가 설치되지 않은 경우에도 이런 종류의 작업을 수행 할 수 있습니다.

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

Tr을 시도해 볼 수도 있습니다.

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

결과는 다음과 같습니다.

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.  
5
JGurtz

Vi 편집기에서 ^ M 문자를 바꾸려면 아래를 사용하십시오.

t1.txt라는 텍스트 파일을여십시오.

vi t1.txt

shift + :를 눌러 명령 모드로 들어가십시오.

%s/^M/\r/g에서 언급 한대로 키를 누릅니다.

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

dos2unix 명령의 대안은 sed와 같은 표준 유틸리티를 사용하는 것입니다.

예를 들어, 유닉스를 수행합니다.

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

유닉스 할일 :

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

Tr을 사용하여 DOS/Windows (\ r\n) 줄 끝을 Unix (\ n) 줄 끝으로 변환합니다 :

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

유닉스 명령 줄에서 줄 바꿈 바꾸기에 대한 게시물

1
Mason Wright

Sed 명령을 통해 파일에서 ^ M을 직접 제거 할 수 있습니다 (예 :

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

변경 내용에 만족하면 .bak 파일을 제거하십시오.

rm -v *.bak
1
kenorb

Perl에서 $/변수를 설정하고 chomp ()를 사용하지 않으려면 다음을 수행하십시오.

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

내 두 센트

0
Ariel Monaco

od -a $file는 Linux에서 이러한 유형의 질문을 탐색하는 데 유용합니다 (위의 dumphex와 유사).

0
Allan Wind