파일에서 CR을 CRLF 줄 끝으로 변환하는 방법은 무엇입니까?

파일에서 CR을 CRLF 줄 끝으로 변환하는 방법은 무엇입니까?

줄 종결자가 있는 ASCII 텍스트 파일(Mac 스타일)은 줄 종결자(DOS/Windows 스타일) CR로 변환되어야 합니다 .CRLF

CR따르지 않는 것을 검색하여 로 LF바꿉니다 . 따라서 반복된 명령은 파일을 손상시키지 않습니다( ).CRCRLFCRCRLF

시도해 보았지만 unix2dos변환에 실패했습니다.

Python/vim 없이 기본 Arch Linux 콘솔에서 이 파일을 어떻게 변환할 수 있나요?

답변1

dos2unix이 유틸리티(DOS에서 Unix 텍스트 형식으로 파일을 변환하는 유틸리티)를 설치하면 각각 Mac 텍스트 파일에서 Unix 텍스트 파일 형식으로, Unix에서 DOS로 변환을 수행하는 mac2unix및 유틸리티도 제공됩니다. 그런 다음 Unix 텍스트를 중간 형식으로 사용하여 Mac 텍스트 형식을 DOS 텍스트 형식으로 변환 unix2dos할 수 있습니다 .mac2unixunix2dos

mac2unix myfile
unix2dos myfile

동일한 파일이나 파일 세트에 대해 여러 번 실행하는 것이 안전합니다.

BusyBox(예: Alpine Linux)에는 내장 dos2unixunix2dos명령이 있지만 mac2unix명령은 없습니다. 따라서 BusyBox 시스템에서는 dos2unix이 패키지에 액세스하려면 이 패키지도 설치해야 합니다 mac2unix.

답변2

Mac2dos 파일은 Perl을 사용하여 변환할 수 있습니다:

$ perl -pe 's/\r\n|\n|\r/\r\n/g' input-file.txt > output-file.crlf

또는 인라인:

$ perl -pi -e 's/\r\n|\n|\r/\r\n/g' file-to-convert

원천:https://stackoverflow.com/a/14155400/529778그리고https://stackoverflow.com/a/6374360/529778

답변3

"... 없이 기본 Arch Linux 콘솔에서 이 파일을 어떻게 변환합니까?"라고 물으셨기 때문에 아무것도 설치하지 않고 모든 Unix 시스템의 모든 쉘에서 awk를 사용하고 전체 입력 파일을 메모리로 읽지 않고도 모든 파일을 변환합니다. CR을 CRLF로:

awk -v RS='\r' -v ORS='\r\n' '1'

예를 들어:

$ printf 'foo\rbar\r' | cat -ve
foo^Mbar^M$

$ printf 'foo\rbar\r' | awk -v RS='\r' -v ORS='\r\n' '1' | cat -ve
foo^M$
bar^M$

또한 "반복된 명령은 파일을 손상시키지 않습니다(CRCRLF 사용)"라고 말했지만 입력을 읽어서 파일이 있는지 알 수 있는 방법이 없기 때문에 다시 호출되는 명령을 강력하게 처리할 수 있는 방법이 없다고 생각합니다. s가 거기에 배치되기 전에 도구를 실행할 때 그 안에 있거나 원래 입력에서 s 뒤에 s가 \r\n있는 경우에는 그렇게 하지 마십시오!\n\r

관련 정보