줄 끝 표시에 Unix 표기법을 사용하는 파일과 Windows 표기법을 사용하는 다른 파일이 있습니다.
유닉스 파일을 보면 vi
줄 끝에 아무것도 표시되지 않습니다. vi
Windows 파일을 열면 파란색이 표시 됩니다 ^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
sed
Perl을 사용하는 경우 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
^M
Ctrl-VCtrl-M
또는 셸 \r
에서 설명하도록 하세요.
sed -Ee $'s/\r?$/\r/' < infile > outfile
( $'...'
거의 모든 쉘은 이 구문을 지원하지만 (내가 아는 한) 표준은 아닙니다.)
답변2
UNIX2DOS이 경우에는 효과가 있을 것입니다. 그런데, 프로그램 저장소가 없는 macOS를 사용하고 계시는 것 같은데, sed -e 's/\n/\r\n/' < input.txt > output.txt
조금 불편할 뿐입니다.