^M문자 없애기

^M문자없애기

      vi로 문서를 보다 보면 줄끝마다 ^M 이 보이는 경우가 있습니다.
      이는 윈도우시리즈(도스포함)에서 작성된 문서를 유닉스로 볼때 생기는 현상 입니다.

      이런 현상이 왜 생기는 이유는 윈도우와 유닉스에서의 ASCII화일 형식이 서로 다릅니다.

      일단 윈도우에서는 엔터시에 한줄을 내리고 커서를 앞으로 보내주지만 즉,엔터 한번으로
      두 명령이 입력되는거죠..

      하지만 유닉스에서는 엔터치면 단지 줄만 바뀌죠..즉 한번의 엔터는 단지 한번의 명령일 뿐 입니다..^^;

      그래서 도스파티션에 있는 화일을 그냥 카피하면 ^M자들이 지저분하게 보이죠..

      반대로 유닉스용 화일을 도스로 카피해서 도스용 에디터로 보면 전부 한줄로 붙어서 나타나게 된답니다.

      아래는 몇가지 방법입니다.

      1. vi 에디터를 이용해서 ^M 문자 없애는 방법

             1) tr 을 이용합니다.
                vi 에디터에서 다음과 같이 입력합니다. 여기서 1G는 첫라인으로 간다는
                뜻이고, 느낌표부터는 쉘명령 tr을 이용한다는 겁니다.

                1G!Gtr -d ^M

             2) ed 명령을 사용합니다.
                vi 에디터에서 다음과 같이 입력합니다. 여기서 : 는 아시다시피
                명령모드로 가는 거구, 1은 첫라인을 $는 마지막 라인을 의미합니다.
                그러므로 여기서 1,$ 는 첫라인부터 마지막라인까지라는 뜻이겠죠?
                s는 substitute의 약자로써 다음의 /피대체어/대체어/ 에서
                피대체어를 대체어로 바꾼다는 것입니다. 여기서는 ^M을 없애라는
                뜻이겠죠? 마지막의 g는 global의 약자로 각 라인에서 해당문자열이
                나올때마다 몽땅 바꾸라는 의미.

                :1,$s/^M//g


      2. perl 을 이용하는 방법

             perl -pi -e 's/\r//' inputfile


      3. sed 를 이용하는 방법

             1 번 vi 에디터를 이용하는 방법에서 언급 되었습니다. 커맨드라인상에서
             바로 수정하는 방법.

             sed 's/^M//g' inputfile > outputfile


      4. awk 를 이용하는 방법

             print $0 는 문서전체를 의미합니다.

             awk '{print $0,"\r"}' inputfile > outputfile


      5. tr 을 이용하는 방법

             1 번 vi 에디터를 이용하는 방법에서도 언급되었지만 에디터를 부르지
             않고 커맨드라인상에서 바로 고치는 방법입니다. -d 옵션은 delete를 의미.

             tr -d '\015' < inputfile > outputfile


      6. mcopy 이용시 옵션을 주는 방법

             -t 옵션을 이용하면 mcopy로 복사할때 ^M 문자가 없어지고 copy됩니다.
         
             mcopy -t a:/test.cap .

      7. fromdos 명령을 이용하는 방법

             간단히 리눅스에 포함되어있는 유틸리티를 이용하는 방법입니다. fromdos는
             도스용 문서를 리눅스(유닉스)용으로, todos는 리눅스에서 도스용으로 변환
             할때 사용할 수 있습니다.

             fromdos inputfile

            
      참고 : ^M 의 입력은 [Ctrl+V][Ctrl+M] 입니다.


      또다른 방법하나.

      //g$s/
      요렇게 하면 몽땅 지워집니다.
      1 은 첫라인부터
      $ 은 마지막라인까지
      s 는 다음과 같이 바꾸는데...
      ^M 은 입력할때 Ctrl+V M 요렇게 해야허구...
      // 는 원래 요사이에 뭔 string이 들어가야하지만
        없애야하기에 암껏두 안썼음.
      g 는 문서전체에 걸쳐 몽땅...

      이게 귀찮으시면 그냥 fromdos 명령 사용하세요~


      저는 보통 vi 편집기 명령모드에서 :1,$s/^M//g 이걸로 ^M을 없애고 있습니다..


'system > unix' 카테고리의 다른 글

su 명령 사용 허가하기  (0) 2008.09.17
bash 환경 설정  (0) 2008.09.17
Unix Shell 종류  (0) 2008.09.17
시스템에서 사용하는 port 1024 개  (0) 2007.11.09
[HP-UX] 시스템 명령어  (0) 2007.10.31