리눅스 vi 에디터에서 ^M 문자 생기는 이유와 삭제 방법

리눅스

리눅스에서 vi 에디터로 텍스트 파일을 열었을 때 각 줄 끝에 ^M이라는 낯선 문자가 표시되는 경우가 있습니다. 이 기호는 실제 텍스트가 아니라, 파일 내부의 개행(줄 바꿈) 방식 차이로 인해 발생하는 표시입니다.

주로 윈도우 환경에서 생성된 텍스트 파일을 리눅스에서 열었을 때 나타나는 현상으로, 스크립트 실행 오류나 설정 파일 문제의 원인이 되기도 합니다. 이 글에서는 ^M 문자가 생기는 원인과 삭제하는 방법, 그리고 ^M이 생기지 않게 하는 예방 방법까지 알아보겠습니다.

^M 문자의 정체

텍스트 줄 끝에 생긴 ^M 화면 - 리눅스 vi 에디터에서 ^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 에디터 내에서 삭제

^M 공백 치환 명령어 - 리눅스 vi 에디터에서 ^M 문자 생기는 이유와 삭제 방법
:%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

저자

댓글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Fill out this field
Fill out this field
유효한 이메일 주소를 입력해주세요.

같은 카테고리 글

Linux 크론탭 Crontab 사용법
Linux 크론탭(Crontab) 사용법
크론탭(Crontab)은 리눅스에서 정해진 시간에 스크립트나 데몬 등을 실행하는 스케줄러(Scheduler) 기능입니다. 특정 시간, 요일에 특정한 작업을 실행해야 하거나 반복 작업을 할…
우분투 컴퓨터 이름 Hostname 변경하는 방법
우분투 컴퓨터 이름 hostname 변경하는 방법
우분투에서 터미널을 열거나 네트워크 공유를 사용해야할 때 표시되는 컴퓨터 이름은 hostname이라고 불리며 hostname을 변경하면 우분투에 표시되는 컴퓨터 이름을 지정할 수…