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

Vim에서 파일을 열 때 이상한 ^M 문자가 보입니다.

안타깝게도 전 세계에서 가장 좋아하는 검색 엔진은 검색어의 특수 문자와 잘 작동하지 않으므로 여기에서 “이 질문은 다음과 같습니다.

  • ^M 문자?

  • 어떻게 거기에있을 수 있었습니까?

  • 어떻게 제거합니까?

댓글

  • It ' 자세한 내용은 제어 문자 digraph입니다. info : help digraph-table.
  • VS 코드에는 열린 파일을 자동으로 변환하는 EOL 옵션이 하단에 있습니다.
  • @StackUnderflow 사용시 VSCode, Linux 파일에서 작업 할 때 줄 끝을 LF로 변경하면 도움이됩니다. WSL을 사용합니다 … $ profile과 같은 Windows 파일은 LF로 끝나는 Linux 파일에 문제가 없습니다. 여기서 Win이 Linux를 능가 할 수도 있습니다.

답변

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

자세한 내용은 이 도움말 을 참조하고 newline .

이 문서 는 vim을 설정하여 다른 끝으로 파일을 투명하게 편집하는 방법에 대해 설명합니다. 줄 마커.

일부 줄 끝에 ^M가있는 파일이 있고이를 제거하려면 Vim에서 다음을 사용하세요.

:s/^M$// 

( Ctrl + V Ctrl + 누르기 M 에서 ^M를 삽입합니다.)

댓글

답변

답변

이것은 나를 위해 일했습니다.

:e ++ff=dos 

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

그런 다음

:set ff=unix 

마지막으로

:wq 

댓글

  • 감사합니다! 이것은 나를 위해 일했지만 수락 된 솔루션은 그렇지 않았습니다.
  • ff는 파일 형식을 참조합니까? ++ff는 어떻습니까?
  • : e ++ ff = dos 명령은 Vim에게 파일을 다시 읽도록 지시하여 dos 파일 형식을 강제합니다. Vim은 CRLF 및 LF 전용 줄 끝을 제거하고 각 줄의 텍스트 만 버퍼에 남깁니다.
  • ff에 대해 알아 보려면 " : help ff "
  • 를 실행하세요.

  • 간단하고 효과적입니다. . cat file1 > > file2에서 파일 1이 실행되지 않았는데 도스 줄 바꿈을 도입하는 이유를 잘 모르겠습니다. ' 처음부터 사용하지 마십시오.

답변

대부분의 UNIX 운영 체제에는 dos2unix. 다른 답변은 “무엇입니까”질문을 다룹니다.

답변

캐리지 리턴을 제거하는 또 다른 방법은 tr 명령.

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

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

답변

sed로이 문제를 정리할 수 있습니다.

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

트릭은 캐리지 리턴을 올바르게 입력하는 방법입니다. 일반적으로 리터럴 캐리지 리턴을 입력하려면 C-v C-m를 입력해야합니다.

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

Answer

Sed in으로 작업을 제자리에 둘 수도 있습니다. -특수 문자를 입력 할 필요없이 솔루션을 배치합니다 (복사 할 수 있으며 작동합니다).

sed -i -e "s/\r//g" filename 

설명 :

-i: in-place -e: regular expression \r: escaped carriage return /g: replace globally 

댓글

  • 질문자가 이미 VIM으로 파일을 수정하고있었습니다. 2012 년부터 여기에 sed 답변이있었습니다.
  • 예,하지만 훌륭하고 작동하는 솔루션이 없었습니다. 기존 sed 솔루션은 ' 즉시 작동하지 않습니다.
  • Dale Hagglund ' s in -place sed 가장 확실하게 작동 합니다.
  • 글쎄요. 저는 ' Ubuntu LTS 18.04에 있습니다.
  • 이는 Ctrl M을 줄 반환으로 계산하는 Windows 데스크톱에서 Alpine Linux의 파일을 편집하는 데 도움이되었습니다. 위의 답변을 무효화합니다.

답변

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

어떻게 거기에 도착할 수 있었습니까?
파일 형식 변경입니다.

어떻게 제거합니까?

vim -b FILE_PATH 

다음 명령으로 저장

:%s/^M//g 

댓글

  • ' 파일 열기 에 오타가 있습니다.
  • 이 답변 다른 답변에 아무것도 추가하지 않습니다. 첫 번째 단락은 수락 된 답변에서 거의 그대로 복사 한 것입니다. 주어진 코드는 아무것도 저장 하지 않고 모든 캐리지 리턴을 제거 합니다. 모든 줄의 문자입니다. 바이너리 모드에서 파일을 여는 방법을 잘 모르겠습니다. 여기에 elp.

답변

제 경우에는

위의 내용이 효과가 없었습니다. 내 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, 

댓글

  • mac2unix -n inputfile outputfile 또는 이와 동등하게 dos2unix -c mac -n inputfile outputfile가 해당 상황을 처리합니다.

답변

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

 ex -bsc "%s/\r//|x" file  
  1. -b 바이너리 모드

  2. % 모든 줄 선택

  3. s 대체

  4. \r 캐리지 리턴

  5. x 저장 후 닫기

답변

~ / .vimrc

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

그런 다음 Windows 줄 끝이있는 파일이 있으면 “: Tounix”명령을 실행합니다.

답변

과거에는 구성 파일도 제대로 구문 분석되지 않고 공백에 대해 불평하는 것을 보았습니다. 세트 목록을 수행하면 공백이 표시되지 않고 grep 파일 이름 [[space]]은 ^ M을 표시합니다.

dos2unix file가 도움이되는 경우

댓글

  • 이 답변은 새로운 것을 가져 오지 않습니다. does2unix는 이미 훨씬 더 오래된 두 답변에서 이미 언급되었습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다