vim에서 DOS 줄 끝을 Linux 줄 끝으로 변환


답변:


1074

DOS2UNIX는 이 작업을 수행하는 명령 줄 유틸리티입니다, 또는 :%s/^M//g당신이 사용하는 경우 Ctrl- v Ctrl- m입력 ^ M으로, 또는 당신은 할 수 :set ff=unix와 정력이 당신을 위해 그것을 할 것입니다.

'fileformat'설정에 대한 문서가 여기 있으며 vim wiki에는 줄 끝 변환에 대한 포괄적 인 페이지가 있습니다 .

또는 파일을 많이 앞뒤로 이동하는 경우 파일을 변환하지 않고 대신 할 수 :set ff=dos있으므로 vim은 DOS 파일임을 알고 줄 끝에 DOS 규칙을 사용합니다.


56
:%s/^M//g해야 :%s/\r//g하기 때문에 ^M"라인의 시작 부분에"단지 수단 "경기 자본"M.
Bunyk

78
대답이 말하고 'ctrl-v ctrl-m을 사용하여 ^ M을 입력하십시오.'
pjz

2
crtl-v 는 좋지 않습니다. Windows에서는 클립 보드 내용을 명령 줄에 붙여 넣습니다. 해결책 :%s/\r//g은 나를 위해 일했다, @Bunyk를 건배
roblogic

3
@ropata Windows에서 원하는 것은 ctrl-q 입니다.
ruffin

2
set ff=unix아무것도하지 않기 때문에 뭔가를 놓치고 있어야합니다 . 파일을 변환 할 수도 있지만 모든 ^M문자가 여전히 있습니다.
felwithe

276

보기에서 줄 끝을 변경하십시오.

:e ++ff=dos
:e ++ff=mac
:e ++ff=unix

이것은 또한 저장 작업으로 사용될 수 있습니다 (: w 만 있으면 화면에 표시되는 줄 끝을 사용하여 저장하지 않습니다).

:w ++ff=dos
:w ++ff=mac
:w ++ff=unix

그리고 명령 행에서 사용할 수 있습니다 :

for file in *.cpp
do 
    vi +':w ++ff=unix' +':q' "$file"
done

4
대단히 감사합니다. 나는 게으른 것을 vi + ': wq ++ ff = unix'<filepath> 시도했다.
a_secenthusiast

2
이것이 가장 큰 답이되어야합니다. :w +ff=unix여기에 쓰여진 다른 것들보다 훨씬 좋으며 bash 스크립트는 좋은 보너스입니다.
mkasberg

:e명령은 설치 VIM 내 Windows에 아무것도 나타나지 않습니다. 내보기에는 여전히 ^M코드가 표시됩니다.
Grant Birchmeier 2016 년

160

나는 일반적으로 사용

:%s/\r/\r/g

조금 이상해 보이지만 vim이 줄 바꿈과 일치하는 방식으로 작동합니다. 나는 또한 기억하기가 더 쉽다는 것을 안다 :)


9
이것은 여러 플랫폼에서 일관되게 작동합니다. 가장 좋은 대답은 여기입니다.
thebigjc

4
:set ff=unix이전 에는 아무런 문제가 없었지만 오늘 열린 파일은 특히 이상했습니다. Vim은 이미 fileformat=unix있지만 모든 결말은 끝났다고 말했다 ^M. 이 솔루션은 저에게 효과적이었습니다.
크리스 B

15
이 솔루션은 파일에 줄 수를 두 배로 늘리는 불필요한 줄을 추가합니다. :%s/\r//g대신 나를 위해 작동합니다.
Victor Zamanian

3
빅터, 파일에 \ r \ n 엔딩이있을 수 있습니다. \ r은 개행 문자로 읽지 않지만 \ n은 읽습니다. 내가 실행중인 파일에는 \ r이 있으며 개행 문자를 추가해야합니다.
Joeyjoejoejr

2
@ VictorZamanian 's :%s/\r//g유일한 범용 솔루션입니다. 특히 DOS와 UNIX 스타일의 줄 바꿈이 이종 혼합 된 혼합 모드 파일에 적합합니다. 정식 솔루션 (예 :set ff=unix, :e ++ff=unix) 같은 줄 바꿈 스타일 현재 버퍼의 끝의 모든 라인을 가정합니다. 때때로 그들은한다. 때로는 그렇지 않습니다. 큐 sadface.
세실 카레

97

다음 명령을 사용하는 것이 좋습니다.

:set fileformat=unix

mac또는 dos파일을 각각 Macintosh 또는 MS-DOS / MS-Windows 파일 규칙으로 변환 할 수도 있습니다 . 파일이 이미 올바른 형식이면 아무 것도 수행하지 않습니다.

자세한 내용은 vim help를 참조하십시오.

:help fileformat

1
이 명령은 Windows vim에서 아무것도하지 않는 것 같습니다. 내 견해에는 여전히 ^M문자가 있습니다.
Grant Birchmeier

set fileformat=unix내 .vimrc 파일에 추가 했습니다.
Joey Allen

20

:set fileformat=unix dos에서 unix로 변환합니다.


1
이것은 실제로 문제를 해결했습니다. 검색하는 동안 해당 문자를 찾을 수 없었습니다.
Insaneo 선장

20
:%s/\r+//g

Vim에서는 모든 캐리지 리턴을 제거하고 줄 바꿈 만 남겨 둡니다.


2
어떤 이유로 위의 창 gvim에서 위의 기능이 작동하지 않았습니다. 그러나 바뀌었을 때 :%s/\r//g매력처럼 작동했습니다.
soltysh

1
@soltysh : % s / \ r \ + $ // g
thinker3


10

dos에서 Unix로 파일 디렉토리 변환

명령 행 및 sed를 사용하여 현재 디렉토리에서 확장자가 ".ext"인 모든 파일을 찾고 "^ M"을 모두 제거하십시오.

@ https://gist.github.com/sparkida/7773170

find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;

또한 위에서 언급했듯이 ^ M = Ctrl+V+ Ctrl+M(캐럿 "^"기호와 M 만 입력하지 마십시오)


9

dos2unix 파일 내용을 직접 수정할 수 있습니다.

임시 파일 리디렉션없이 파일에서 직접 사용할 수 있습니다.

dos2unix input.txt input.txt

위의 가정은 미국 키보드를 사용합니다. -영국 키보드를 사용하려면 437 옵션을 사용하십시오.

dos2unix -437 input.txt input.txt



6

다음 명령으로 :

:%s/^M$//g 

(가) 가져 오기 ^M유형을 표시 CtrlV한 후 CtrlM. CtrlVVim에게 문자 그대로 입력 된 다음 문자를 가져 오도록 지시합니다.


6

^ M을 표시하는 것에 대한 의견은 저에게 효과적입니다. 내 vi에 "^ M"을 입력해도 아무것도 찾을 수 없습니다 (찾을 수 없음). CTRL+ V CTRL+ M순서는 완벽하지만 그것을했다.

내 작업 대체 명령은

:%s/Ctrl-V Ctrl-M/\r/g

내 화면에서 다음과 같이 보입니다.

:%s/^M/\r/g

4
:%s대신 사용할 수 있습니다 :1,$s. %의 줄임말입니다 1,$.
Tin Man

5

매우 쉬운 방법을 찾았습니다. 나노로 파일을여십시오. nano file.txt

를 눌러 CTRL+는 O저장하지만 누르기 전에 Enter눌러 : ALT+는 DDOS와 유닉스 / 리눅스 라인 엔딩 타협 전환, 또는 : ALT+는 MMac 및 유닉스 / 리눅스 라인 엔딩 타협을 누른 다음을 누릅니다 전환 Enter저장 및 CTRL+ X종료합니다.


리눅스 서버 에서이 작업을 수행하면 파일에 ^M엔딩 이 생겼습니다. 유지하려면 할 일로 저장하고 제거하려면 Linux로 저장하십시오. cat -v
HattrickNZ

이 질문은 나노가 아니라 vim에 관한 것입니다.
Grant Birchmeier

5
:g/Ctrl-v Ctrl-m/s///

CtrlM\rDOS 줄 끝이 추가되는 문자 또는 캐리지 리턴입니다. CtrlVvim에게 CtrlM명령 행에 리터럴 문자 를 삽입하도록 지시 합니다.

전체적으로 취해진이 명령은 모든 것을 대체 \r하지 않고 줄의 끝에서 제거합니다.



3

다음 명령을 사용할 수 있습니다.
:%s/^V^M//g
여기서 '^'은 사용 CTRL키를 의미합니다 .


2

아래 명령은 현재 디렉토리의 모든 .sh 파일을 다시 포맷하는 데 사용되며 Fedora OS에서 테스트했습니다.

for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done

2

vim에서 다음을 입력하십시오.

:w !dos2unix %

현재 버퍼의 내용을 dos2unix 명령으로 파이프하고 결과를 현재 내용 위에 씁니다. Vim은 파일을 다시로드하도록 요청합니다


2

리눅스 콘솔에서 직접 실행하려면 : vim file.txt +"set ff=unix" +wq


1

일반적 dos2unix으로이 명령에 사용할 수 있는 명령이 있습니다. GNU 및 BSD 버전이 인수를 처리하는 방식이 다르기 때문에 설명서를 읽으십시오.

BSD 버전 :

dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME

GNU 버전 :

dos2unix $FILENAME

또는 dos2unix여기에 제안 된 답변을 사용하여 직접 만들 수 있습니다 .

function dos2unix(){
    [ "${!}" ] && [ -f "{$1}" ] || return 1;

    { echo ':set ff=unix';
      echo ':wq';
    } | vim "${1}";
}

1

나는 어딘가에서 이것을 볼 줄 알았다. FreeBSD 로그인 팁은 다음과 같습니다.

DOS 파일에서 모든 ^ M 문자를 제거해야합니까? 시험

tr -d \\r < dosfile > newfile
    -- Originally by Dru <genesis@istar.ca>

0

이 주제는 매우 오래되었지만 위키 백과의 다른 자료를 넣고 싶습니다.

%s/\r\+$//g

그 줄은 줄 끝까지 모든 캐리지 리턴 표지판 (하나 이상 반복)을 찾아 삭제하므로 \neol에 머물러 있습니다.


0

이게 내 방법이야. dos EOL에서 파일을 열었고 파일을 저장하면 자동으로 unix EOL로 변환됩니다.

autocmd BufWrite * :set ff=unix

0

Windows에서 NotePad 또는 Note ++ ++에서 파일을 작성하고 Linux로 가져 와서 vim으로 열면 각 행의 끝에 ^ M이 표시됩니다. 이것을 제거하려면

Linux 터미널에서 다음을 입력하십시오.

dos2unix filename.ext

이것은 필요한 마술을 할 것입니다.


0

^ M 대신에 개행을 원했습니다. 구조에 펄 :

perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt

또는 stdout에 쓰려면 :

perl -p -e 's/\x0d/\n/g' < excel_created.txt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.