리눅스에서 vi 에디터로 텍스트 파일을 열었을 때 각 줄 끝에 ^M이라는 낯선 문자가 표시되는 경우가 있습니다. 이 기호는 실제 텍스트가 아니라, 파일 내부의 개행(줄 바꿈) 방식 차이로 인해 발생하는 표시입니다.
주로 윈도우 환경에서 생성된 텍스트 파일을 리눅스에서 열었을 때 나타나는 현상으로, 스크립트 실행 오류나 설정 파일 문제의 원인이 되기도 합니다. 이 글에서는 ^M 문자가 생기는 원인과 삭제하는 방법, 그리고 ^M이 생기지 않게 하는 예방 방법까지 알아보겠습니다.
목차
^M 문자의 정체

^M 문자는 캐리지 리턴(Carriage Return, CR)을 의미하며, ASCII 코드로는 0x0D입니다. 이는 윈도우 환경에서 개행을 표현할 때 사용하는 CR+LF(Carriage Return + Line Feed) 방식에서 유래합니다.
윈도우에서 만든 텍스트 파일이나 소스 코드를 리눅스에서 열면, CR 문자인 ^M이 vi 에디터에서 표시됩니다. 이는 편집 오류나 쉘 스크립트 실행 시 command not found 같은 문제를 유발할 수 있어 정리해 주는 것이 좋습니다.
운영체제 | 개행 방식 | 줄 끝에 추가되는 문자 |
---|---|---|
윈도우 | CR + LF | \r\n → ^M\n (vi에서 ^M으로 표시) |
리눅스 | LF | \n |
맥(구형) | CR | \r |
^M 문자 삭제 3가지 방법
^M 문자를 삭제하는 방법으로 에디터에서 치환, 문자 변환 저장 명령어, dos2unix 유틸리티를 사용해 적용할 수 있습니다.
1. vi 에디터 내에서 삭제

:%s/^M//g
vi 에디터에서 파일을 열고 위 명령어를 실행합니다. 여기서 ^M은 Ctrl+V 키를 누른 후 Ctrl+M을 추가로 눌러 입력해야 합니다. 복붙하면 인식되지 않습니다.
2. tr 명령어 사용
tr -d '\r' < winfile.txt > unixfile.txt
문자 변환 명령어 tr을 사용해서 원본 파일에서 \r 문자를 제거합니다. 윈도우의 개행 방식 CR에 해당하는 \r을 제거한 후 unixfile.txt에 다시 저장하면 ^M 문자가 삭제됩니다.
3. dos2unix 명령어 사용
dos2unix filename.txt
find . -type f -name "*.txt" -print | xargs dos2unix
dos2unix는 윈도우에서 생성한 텍스트를 리눅스(유닉스) 방식으로 변환하는 리눅스 유틸리티입니다.
파일 하나에 명령어를 적용하려면 첫 번째 줄을 입력하고, 폴더 내의 모든 텍스트 파일에 적용하려면 두 번째 명령어를 입력하면 됩니다.
두 번째 명령어의 경우 txt 확장자에 대해 작동하는 조건이 붙어있는데, 원하는 확장자로 수정해 사용하면 되겠습니다.
^M 문자 방지 및 팁
파일을 생성할 때부터 UNIX 스타일로 저장하는 것이 중요합니다. 윈도우에서 텍스트 파일 작성 시, 메모장보다는 VS Code, Notepad++ 같은 에디터를 사용하고, 파일 인코딩을 Unix (LF) 로 설정하면 원인을 해결할 수 있습니다.
FTP로 파일 전송 시에는 바이너리 모드로 전송하거나, 자동 개행 변환 기능을 꺼두는 것이 좋으며 Git을 사용하는 경우 .gitattributes 설정으로 CRLF → LF 자동 변환을 관리할 수 있습니다.
.gitattributes ^M 방지 설정
* text=auto eol=lf