Vim에서 파일을 열 때 이상한 ^M
문자가 보입니다.
안타깝게도 전 세계에서 가장 좋아하는 검색 엔진은 검색어의 특수 문자와 잘 작동하지 않으므로 여기에서 “이 질문은 다음과 같습니다.
-
^M
문자? -
어떻게 거기에있을 수 있었습니까?
-
어떻게 제거합니까?
댓글
답변
^M
캐리지 리턴 문자입니다. 이것을 본다면 아마도 DOS / Windows 세계에서 시작된 파일을보고있을 것입니다. 여기서 줄 끝은 캐리지 리턴 / 줄 바꿈 쌍으로 표시되는 반면 Unix 세계에서는 줄 끝 하나의 줄 바꿈으로 표시됩니다.
자세한 내용은 이 도움말 을 참조하고 newline .
이 문서 는 vim을 설정하여 다른 끝으로 파일을 투명하게 편집하는 방법에 대해 설명합니다. 줄 마커.
일부 줄 끝에 ^M
가있는 파일이 있고이를 제거하려면 Vim에서 다음을 사용하세요.
:s/^M$//
( Ctrl + V Ctrl + 누르기 M 에서 ^M
를 삽입합니다.)
댓글
-
:%s/^M/\r/g
대신^M
를 제거하고^M
를 줄 바꿈 문자 .%
가 없으면 명령이 현재 줄에만 적용됩니다. 그리고^M
가The first line.^MThe second line.
- ' 많은 줄 바꿈을 원하지 않습니다.
:%s/^M/
- 만약 '는 그 자체로 캐리지 리턴 일 뿐이며, 고전적인 (Unix 이전) Macintosh 줄 바꿈 일 수 있습니다. Mac 용 Excel 2007과 같은 일부 최신 프로그램도 어떤 이유로 그렇게합니다.
- @larsks 그러나 altap.cz/salamander/help/salamand/appendix_txtfiles
- @larsks a>는
^M
가 UNIX에서 사용된다고 말합니다. - 내 vim 구성에 '가 있는지 확실하지 않습니다. 하지만
Ctrl+Q
를 입력 한 다음Ctrl+M
를 입력해야 해당 문자가 생성됩니다!
와 같이 줄 끝에없는 몇 가지 예를 보았습니다.
답변
이 작업을 수행하는 더 간단한 방법은 다음 명령을 사용하는 것입니다.
dos2unix filename
이 명령은 경로 패턴에서도 작동합니다. 예 :
dos2unix path/name*
작동하지 않으면 다른 모드를 사용해보십시오.
dos2unix -c mac filename
-
-c
변환 모드를 설정합니다. 여기서 CONVMODE는ascii, 7bit, iso, mac
중 하나이며ascii
가 기본값입니다.
댓글
- +1 -c 플래그 기본값 및 기타 옵션에 대해 언급합니다. 처음 시도했을 때 기본값은 ' 예상 결과를 얻지 못했습니다.
dos2unix -c max
에서는 작동했습니다.dos2unix: converting file launch_me.sh to Unix format...
- 놀라운 작은 유틸리티. 우분투의 경우
apt-get install dos2unix
입니다. 재귀 적으로 사용해야하는 경우 여기에서이 솔루션을 참조 할 수 있습니다. stackoverflow.com/questions/11929461/ … 어리석게도 모든 디렉토리에서 수동으로 실행했고 사실을 찾아 볼 생각 만했습니다.
답변
이것은 나를 위해 일했습니다.
: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
-
-b
바이너리 모드 -
%
모든 줄 선택 -
s
대체 -
\r
캐리지 리턴 -
x
저장 후 닫기
답변
~ / .vimrc
command! Tounix :call Preserve("1,$s/^M//")
그런 다음 Windows 줄 끝이있는 파일이 있으면 “: Tounix”명령을 실행합니다.
답변
과거에는 구성 파일도 제대로 구문 분석되지 않고 공백에 대해 불평하는 것을 보았습니다. 세트 목록을 수행하면 공백이 표시되지 않고 grep 파일 이름 [[space]]은 ^ M을 표시합니다.
dos2unix file
가 도움이되는 경우
댓글
- 이 답변은 새로운 것을 가져 오지 않습니다. does2unix는 이미 훨씬 더 오래된 두 답변에서 이미 언급되었습니다.
help digraph-table
.