`^ M`은 무엇이며 어떻게 제거합니까?


134

에서 파일을 열면 vim이상한 ^M문자가 표시됩니다.

불행히도 세계에서 가장 좋아하는 검색 엔진은 쿼리의 특수 문자와 잘 맞지 않으므로 여기에서 묻습니다.

  • ^M캐릭터 는 무엇입니까 ?

  • 어떻게 거기에 도착했을까요?

  • 어떻게 제거합니까?


3
무의미한 편집인 Vlastimil. 영국 영어로 된 과거 시제가 적절합니다.
Jesse_b

1
자세한 정보는 제어 문자 digraph help digraph-table입니다.
에릭 레친 스키

답변:


107

^M캐리지 리턴 문자입니다. 이것이 보이면 아마도 DOS / Windows 환경에서 시작된 파일을보고있을 것입니다. 여기서 줄 끝은 캐리지 리턴 / 줄 바꾸기 쌍으로 표시되는 반면 Unix 세계에서는 줄 끝 단일 줄 바꿈으로 표시됩니다.

자세한 내용이 기사 를 읽고 newline 의 Wikipedia 항목을 참조하십시오 .

이 문서 에서는 줄 끝 표식이 다른 파일을 투명하게 편집하기 위해 vim을 설정하는 방법에 대해 설명합니다.

^M일부 줄 끝에 파일이 있고 파일을 제거하려면 Vim에서 이것을 사용하십시오.

:s/^M$//

( Ctrl+ V Ctrl+ M를 눌러 삽입하십시오 ^M.)


11
시도 :%s/^M/\r/g제거하는 대신 ^M및 교체 ^M개행 문자로 \r. 이 없으면 %명령은 현재 행에만 적용됩니다. 그리고 다음 ^M과 같이 줄의 끝에 있지 않은 몇 가지 예를 The first line.^MThe second line.
George

아니면하지 않으려면 라인의 부하는 당신이 단지 수있는 나누기:%s/^M/
carefulnow1

2
그 자체만으로 캐리지 리턴 인 경우 이는 고전 (유닉스 이전) Macintosh 줄 바꿈 일 수 있습니다. Mac 용 Excel 2007과 같은 일부 최신 프로그램조차도 어떤 이유로 그렇게합니다.
sudo

@larsks 그러나 altap.cz/salamander/help/salamand/appendix_txtfiles는 것을 말한다는 ^MUNIX에서 사용되는
비벡

링크 된 기사에 따르면 \n유닉스에서 사용 된다고 말합니다 . 즉 ASCII 코드입니다 10, 그렇지 않으면로 알려진 ^J.
Larsks

39

대부분의 UNIX 운영 체제에는 dos2unixCRLF를 LF로 변환 하는 유틸리티 가 있습니다. 다른 답변은 "무엇입니까"질문을 다룹니다.


36

이를 수행하는 가장 간단한 방법은 다음 명령을 사용하는 것입니다.

dos2unix filename

이 명령은 경로 패턴에도 적용됩니다 (예 :

dos2unix path/name*

작동하지 않으면 다른 모드를 사용해보십시오.

dos2unix -c mac filename
  • -c변환 모드를 설정하십시오. : CONVMODE 중 하나를 인 경우 ascii, 7bit, iso, macascii기본 인.

22

이것은 나를 위해 일했다

:e ++ff=dos 

: e ++ ff = dos 명령은 Vim에게 파일을 다시 읽도록 지시하여 dos 파일 형식을 강제합니다. Vim은 CRLF 및 LF 전용 줄 끝을 제거하고 버퍼에 각 줄의 텍스트 만 남겨 둡니다.

그때

:set ff=unix 

그리고 마지막으로

:wq 

3
감사! 이것은 나를 위해 일했지만 받아 들여진 해결책은하지 않았다
Bjorks는 1

ff파일 형식을 나타 냅 니까 ? 무엇에 대해 ++ff?
KcFnMi

: e ++ ff = dos 명령은 Vim에게 파일을 다시 읽도록 지시하여 dos 파일 형식을 강제합니다. Vim은 CRLF 및 LF 전용 줄 끝을 제거하고 버퍼에 각 줄의 텍스트 만 남겨 둡니다.
Stryker

10

캐리지 리턴을 제거하는 다른 방법은 tr명령을 사용하는 것입니다.

다음과 같은 작은 스크립트가 있습니다

#!/bin/sh
tmpfile=$(mktemp)
tr -d '\r' <"$1" >"$tmpfile"
mv "$tmpfile" "$1"

6

다음과 sed같이 정리할 수 있습니다 .

sed -e 's/^M$//' < infile > outfile

요령은 캐리지 리턴으로 올바르게 들어가는 방법입니다. 일반적으로 C-v C-m리터럴 캐리지 리턴을 입력하려면 입력 해야합니다 . 당신은 또한 함께 sed 작업을 할 수 있습니다

sed -i.bak -e 's/^M$//' infile

2

이 ^ M은 무엇입니까?
^ M은 캐리지 리턴 문자입니다. 이것이 보이면 아마도 DOS / Windows 환경에서 시작된 파일을보고있을 것입니다. 여기서 줄 끝은 캐리지 리턴 / 줄 바꾸기 쌍으로 표시되는 반면 Unix 세계에서는 줄 끝 단일 줄 바꿈으로 표시됩니다.

어떻게 거기에 도착했을까요?
파일 형식이 변경된 경우

어떻게 제거합니까?
로 파일을여십시오

vim -b FILE_PATH

다음 명령으로 저장하십시오

:%s/^M//g

을 (를) 사용하여 파일 열기에 오타가 있습니다 .
Mateusz Piotrowski

4
이 답변은 다른 답변에 아무것도 추가하지 않습니다. 첫 번째 단락은 허용 된 답변의 거의 완전한 사본입니다. 주어진 코드는 아무것도 저장 하지 않고 모든 줄에서 모든 캐리지 리턴 문자를 제거 합니다. 그리고 바이너리 모드에서 파일을 여는 것이 어떻게 도움이 될지 잘 모르겠습니다.
Dubu

2

나의 경우에는,

위의 아무것도 작동하지 않았습니다. 저는 Mac에서 Linux 시스템으로 CSV 파일을 복사했으며 위의 모든 명령을 사용했지만 아래의 것 외에는 아무런 도움이되지 않았습니다.

tr "\015" "\n" < inputfile > outputfile

^ M 문자가 아래와 같이 줄 사이에 샌드 스위치 된 파일이 있습니다.

Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,

0

Ex 모드에서 Vim을 사용할 수 있습니다 :

ex -bsc '%s/\r//|x' file
  1. -b 이진 모드

  2. % 모든 줄을 선택하십시오

  3. s 대용품

  4. \r 캐리지 리턴

  5. x 저장하고 닫습니다


0

~ / .vimrc에 다음 줄을 추가하십시오

command! Tounix :call Preserve('1,$s/^M//')

그런 다음 Windows 줄 끝이있는 파일이 있으면 ": Tounix"명령을 실행하십시오.


-1

과거에는 구성 파일이 올바르게 구문 분석되지 않고 공백에 대해 불평하는 것을 보았지만 vi를 설정하고 목록을 설정하면 공백이 표시되지 않습니다. grep filename [[space]]는 ^ M을 표시합니다.

그때 dos2unix file도움 이 될 때


이 답변은 새로운 것을 가져 오지 않습니다. does2unix는 적어도 두 가지 답변에서 이미 더 오래 언급되었습니다.
Rui F Ribeiro
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.