Unix 파일의 줄 끝을 Windows ^M으로 변경하면 작동하지 않습니다.

Unix 파일의 줄 끝을 Windows ^M으로 변경하면 작동하지 않습니다.

줄 끝 표시에 Unix 표기법을 사용하는 파일과 Windows 표기법을 사용하는 다른 파일이 있습니다.

유닉스 파일을 보면 vi줄 끝에 아무것도 표시되지 않습니다. viWindows 파일을 열면 파란색이 표시 됩니다 ^M.

여기에 이미지 설명을 입력하세요.

문제는 가운데 아래부터 행에 ^M파란색(??)이 포함되어 있지 않다는 것입니다.

^M전체 파일을 모든 줄로 변환하려고합니다 .

나는 많은 명령을 시도했지만 특히 이것은

sed -e 's/$/^M/' < input.txt > output.txt

"^M"을 as 대신 두 문자로 추가하면 이미 올바른 문자가 있는 줄에서도 이 작업이 수행 Command-M됩니다 .^M

나도 시도했다

sed -e 's/\r/^M/' < input.txt > output.txt

그리고

sed -e 's/\n/^M/' < input.txt > output.txt

성공하지 못했다...

Issue a cat -e input.txt^M 올바른 줄에 다음이 표시됩니다.

1895;2;3;5;10;14;34^M$
1896;3;6;14;15;21;25^M$
1897;9;22;25;47;52;58^M$
1898;12;34;45;53;55;58^M$

이건 거의 틀렸어

1899;20;23;35;36;44;48$
1900;8;11;27;28;43;46$
1901;11;12;26;30;37;53$
1902;02;07;09;18;21;25$
1903;09;10;15;28;43;45$

command-m을 사용하여 모든 행을 얻는 방법은 무엇입니까?

답변1

sedPerl을 사용하는 경우 Perl을 사용하는 것이 다른 버전 등을 둘러보는 가장 쉬운 방법입니다.

perl -pe 's/\r?$/\r/' < infile > outfile

또는 그 자리에서:

perl -i.bak -pe 's/\r?$/\r/' infile 

이렇게 하면 이미 캐리지 리턴이 있는 줄을 제외한 모든 줄의 끝에 캐리지 리턴이 추가됩니다. (또는 실제로 0 또는 1 CR:s를 1 CR로 대체합니다.)


시험:

$ cat -e infile
with cr^M$
no cr$
still no cr$

$ perl -pe 's/\r?$/\r/' < infile |cat -e
with cr^M$
no cr^M$
still no cr^M$

$ perl --version
This is perl 5, version 18, subversion 2 (v5.18.2) built for darwin-thread-multi-2level
[...]

어디선가 macOS에 대한 언급을 본 것 같습니다. 그것이 당신이 사용하고 있는 것이라면, 문제는 sed그것이 제공하는 기능이 GNU sed가 지원하는 것의 절반을 지원하지 않는다는 것입니다. 내 Mac에 있는 제품이 이를 지원하지 않는 것 같 \r거나 \xHH...

그러나 명령줄에 리터럴 캐리지 리턴을 붙여넣을 수 있습니다.

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

두 문자 및 here ^M대신 단일 캐리지 리턴이 있는데, 이는 쉘(Bash가 있다고 가정)이 로 표시합니다 . 문자를 입력해야 합니다.^M^MCtrl-VCtrl-M

또는 셸 \r에서 설명하도록 하세요.

sed -Ee $'s/\r?$/\r/' < infile > outfile

( $'...'거의 모든 쉘은 이 구문을 지원하지만 (내가 아는 한) 표준은 아닙니다.)

답변2

UNIX2DOS이 경우에는 효과가 있을 것입니다. 그런데, 프로그램 저장소가 없는 macOS를 사용하고 계시는 것 같은데, sed -e 's/\n/\r\n/' < input.txt > output.txt조금 불편할 뿐입니다.

관련 정보