본문 바로가기

Linux and Unix

DOS 파일포맷의 ^M 없애기

이글은 2005/07/11 15:09에 이글루스 블로그에 적은 글을 수정 및 옮겨 왔습니다.


이글은 KLTP 에서 퍼온 글 입니다. (http://kltp.kldp.org/stories.php?story=05/02/17/4242887&topic=25)


Linux나 Unix에서 vi(m)을 사용하다보면 윈도우즈에서 작업한 텍스트 파일에 ^M 문자가 붙는 경우를 종종 봅니다.

현재 vim에서는 도스 문서로 문서를 읽게 되면 이 문자가 붙지 않지만 UNIX 포멧으로 읽게되면 종종 이 문자 때문에 문서 보기가 상당히 귀찮아 보일 때가 있습니다.

특히, SQL 백업 파일을 볼 때 이 문자가 붙기도 하는데 가독성이 너무 떨어져서 읽고 이해하기가 상당히 힘들죠.

(sun의 파일을 aix에서 받을 때에도 이런 문제가 발생한다고 합니다)


^M은 ^+M이 아니라 Control+v+m 입니다. 따라서, 다음에 이 문자를 없애기 위해서 입력할 때도 Ctrl+v+m 키를 동시에 입력해야 합니다. 


다음은 http://www.lug.or.kr/에 올라온 몇 개의 팁을 참조하여 정리한 것입니다.

생각보다 많은 방법들이 있을 수 있겠군요.


1. vi(m)이 열린 상태

1.1 문자 치환 명령 이용

다음과 같이 문자 치환 명령으로 이 문자를 없애도록 합니다.

:1,$s/^M//g


물론 이것의 입력은 다음과 같이 하도록 합니다.

:1,$s/[Control]+v+m을 누른다.//g


1.2 파일포맷 변경

vim 5.0 이상에서는 다음과 같이 명령을 내리도록 합니다


:set fileformat=unix 혹은 :set ff=unix

그리고, 저장하고 종료합니다.

:wq


이와 반대로 끝에 ^M붙이려면 다음과 같이 합니다.

:set fileformat=dos


이전버전에서는 다음과 같이 합니다.

:set textmode



2. 프롬프트 상에서

2.1 dos2unix 이용

dos2unix와 unix2dos를 이용하여 상호 변환할 수 있습니다.


다음과 같이 하면 ^M 문자가 없어집니다.

$ dos2unix [문서명](여러 파일의 경우 *.확장자)


그리고 다음과 같이 하면 ^M 문자가 생기죠.

$ unix2dos [문서명]


2.2 cat과 tr을 이용한 방법

다음과 같이 하면 해당 파일의 ^M 문자가 없어집니다.

$ cat dos-file | tr -d ^M > unix-file


2.3 perl 스크립트

다음과 같이 하면 여러파일을 한번에 바꾸게 됩니다.


# perl -i -pe 's/

//g' *.html


3. 다른 에디터의 사용

pico 라는 에디터 아실겁니다. 기능은 별로 없지만 빠르고 간편하죠.

vi나 emacs에서 ^M으로 잡히는 것이 pico에서는 안 잡히는데,

파일을 pico로 열어서 다시 이 문서를 저장합니다.

그리고 vi나 emacs로 읽으면 ^M이 모두 없어진 것을 알 수 있습니다.


4. man 페이지의 ^M, ^H 문자

man 페이지를 일반 화일로 바꾸면 ^M, ^H 등이 생기는데(예, 한컴리눅스 ^H)

다음과 같이 하면 이 문자를 없애고 볼 수 있습니다.


4.1 ps 또는 pdf로 변환하기

man -t 변경 시킬 파일 > 변경 후 파일명.ps

man -t 변경 시킬 파일 > 변경 후 파일명.pdf


예) man -t ls > ls.ps 또는 ls.pdf로 보시면 됩니다.


4.2 텍스로 변환하기

man 변환시킬명령 | col -b> 변환 후 파일명.txt


예) man ls | col -b > ls.txt