본문 바로가기
IT&DEV - IT & 개발/ETC

vi ^M 제거 (개행문자 제거)

by Hoft 2024. 12. 27.

개발자라면 한 번쯤은 Unix와 Windows 간 파일 포맷 차이로 인해 발생하는 문제를 경험해 보셨을 겁니다. 특히, vi 편집기로 파일을 열었을 때 줄 끝마다 ^M 문자가 나타나는 현상은 꽤나 흔한데요. 이 문제는 Windows의 줄바꿈 방식(CRLF)과 Unix/Linux의 줄바꿈 방식(LF)의 차이로 인해 발생합니다. 이러한 ^M 문자는 가독성을 방해할 뿐만 아니라 스크립트 실행 오류의 원인이 되기도 합니다.

개행문자

이번 블로그에

서는 ^M 문제를 해결하는 방법을 자세히 알아보겠습니다.

 

 

1. ^M 문자란?

^M 문자는 파일에 포함된 Carriage Return(CR, \r) 문자를 표시한 것입니다. Windows에서는 줄바꿈을 표현할 때 CR과 Line Feed(LF, \n)를 함께 사용하지만, Unix/Linux에서는 LF만 사용합니다. 이로 인해 Windows에서 작성된 파일을 Unix/Linux 환경에서 열면 CR이 ^M으로 표시됩니다.

2. ^M 문제 해결 방법

방법 1: dos2unix 유틸리티 사용

dos2unix는 Windows 형식의 파일을 Unix 형식으로 변환하는 데 사용되는 간단한 명령어입니다.

sudo apt install dos2unix   # 유틸리티 설치 (Ubuntu 기준)
dos2unix filename.txt       # 파일 변환
dos2unix *.txt              # 디렉토리 내 모든 .txt 파일 변환

이 방법은 빠르고 효율적이며, 대부분의 Unix/Linux 배포판에서 지원됩니다.

방법 2: vi 명령어로 직접 수정

vi 편집기를 사용하여 ^M 문자를 제거할 수 있습니다.

  1. vi로 파일 열기:
  2. vi filename.txt
  3. 명령 모드에서 다음 명령 실행 :  이 명령은 파일 전체에서 ^M(Carriage Return)을 찾아 제거합니다.
    여기에서 ^M 은  Control + v + m 을 눌러서 입력해야합니다

:%s/^M//g

방법 3: tr 명령어 사용

tr은 문자 변환에 사용되는 명령어로, ^M 문자를 제거할 때 유용합니다.

여기에서 ^M 은  Control + v + m 을 눌러서 입력해야합니다.

tr -d '^M' < filename.txt > newfile.txt

방법 4: sed 명령어 사용

sed를 사용하면 파일 내용을 직접 수정할 수 있습니다.

sed -i 's/\r//' filename.txt

방법 5: perl 스크립트 사용

perl을 사용하면 줄바꿈 문제를 보다 정교하게 처리할 수 있습니다.

perl -pi -e 's/\r//' filename.txt

3. 각 방법의 특징

dos2unix 간단하고 빠르며 다수 파일 처리에 적합 추가 소프트웨어 설치가 필요
vi 추가 설치 없이 수정 가능 대량 파일 처리에는 비효율적
tr 단일 파일 수정에 적합 원본 파일이 수정되지 않음
sed 빠르고 강력한 수정 도구 명령어 문법이 다소 복잡할 수 있음
perl 복잡한 작업에 적합 명령어가 길고 초보자에게 어려울 수 있음

 


^M 문제는 Windows와 Unix/Linux 간의 줄바꿈 방식 차이에서 비롯되는 흔한 문제입니다. 이를 해결하기 위해 dos2unix, vi, tr, sed, perl 등의 다양한 방법을 사용할 수 있습니다. 상황과 환경에 따라 적절한 방법을 선택하면 됩니다.

 

이 글이 여러분의 개발 환경에서 발생하는 ^M 문제를 해결하는 데 도움이 되었길 바랍니다.

댓글