서로 다른 운영체제간의 텍스트 파일을 전송할 때 (예 : 윈도우에서 리눅스로 파일 업로드) 각 라인의 끝에 ^M 이라는 문자가 포함될 때가 있습니다.
이는 개행 문자를 처리하는 방식이 서로 다르기 때문에 파일을 특정 방식으로 변환하지 않고 그대로 가져오게 되어 발생하게 됩니다. 최근 리눅스에서는 이러한 문제를 대부분 대체해주지만 혹여나 해당 문자가 포함되어 있다면 아래 방법으로 ^M 문자를 지울 수 있습니다.
리눅스 ^M 문자 제거 방법
- vi 바이너리 모드로 접근 (^M 개행문자 제거)
vi -b
-b 옵션을 붙여 vi를 실행하면 ^M 개행 문자가 제거된 상태로 편집 모드에 진입하게 됩니다. - dos2unix 설치
dos2unix는 이러한 문제를 해결하기 위한 변환기입니다. ^M 문자가 포함된 파일을 아래 명령어와 같이 사용하여 쉽게 변환이 가능합니다.
$ sudo yum install dos2unix (또는 sudo apt install dos2unix)
$ dos2unix [filename] 반대로 unix2dos 명령어를 사용하여 ^M 문자를 추가할 수도 있습니다. - vi 또는 vim 에서 아래 명령어 실행
vi 또는 vim 에서 ‘ : ‘ 를 입력하여 명령 모드를 실행한 후 아래와 같이 입력합니다.
:set fileformat=unix (:set ff=unix로 입력해도 됩니다.)
반대로 :set fileformat=dos 를 입력하면 ^M 을 붙이게 됩니다.
만약 vi 가 이전 버전이라면, :set textmode 로 시도해보시면 됩니다. - 직접 제거
마지막으로 vim에서 ^M 문자를 직접 제거하는 방법이 있습니다. 길이가 짧다면 그냥 지우셔도 무관하지만 긴 내용인 경우 정규식을 사용하여 바로 제거할 수 있습니다.
:%s/^M$//g
(명령 모드 상태에서 %s/ 까지는 직접 입력한 후 Ctrl + V 과 Ctrl + M을 이용하여 ^M 을 입력해야 합니다.)