Fold는 모든 CR과 CRLF를 LF로 변환합니까?

Fold는 모든 CR과 CRLF를 LF로 변환합니까?

줄 종결자로 CRLF가 필요한 오래된 프린터를 사용하고 있습니다. 내가 인쇄하고 있는 일부 텍스트에는 일반적인 줄 끝이 없으며 확실한 해결책은 fold(또는 더 정확하게는 fold -s) 것 같습니다. 그러나 이렇게 하면 프린터는 캐리지를 왼쪽으로 재설정하지 않고 한 줄 앞으로 이동합니다. 즉, 필요한 CR 없이 LF로 전송된 것처럼 인쇄합니다.

이에 대한 가장 좋은 해결책은 무엇입니까? 인쇄하기 전에 through의 출력을 포팅해야 합니까 fold? tr이에 대한 나의 노력은 성공하지 못했고 아무런 효과가 없었거나 여러 가지 잘못된 줄 끝을 만들어냈습니다. 실패 예:

cat exampleCRLF.txt | fold -s | tr "\n" "\n\r" | lpr -P PrintAdapter

이것은 OS X에 속하며 중요한 경우 쉘은 BASH라고 생각합니다.

답변1

좋은 해결책이 있어요

cat example.txt | fold -s | awk 'sub("$", "\r")' | lpr -P PrintAdapter

답변2

foldMac OS X 10.11에서는 CR이 LF로 변환되지 않습니다.

$ perl -E 'say(("aaaa "x17)."\r") for 1..2' | hexdump -C | grep 0d          
00000050  61 61 61 61 20 0d 0a 61  61 61 61 20 61 61 61 61  |aaaa ..aaaa aaaa|
000000a0  61 20 61 61 61 61 20 61  61 61 61 20 0d 0a        |a aaaa aaaa ..|
$ perl -E 'say(("aaaa "x17)."\r") for 1..2' | fold -s | hexdump -C | grep 0d
00000050  0a 61 61 61 61 20 0d 0a  61 61 61 61 20 61 61 61  |.aaaa ..aaaa aaa|
000000a0  61 61 20 61 61 61 61 20  0a 61 61 61 61 20 0d 0a  |aa aaaa .aaaa ..|
$ 

(CR) 후에도 여전히 fold출력 에 존재합니다 0d. (NL)은 fold필요한 경우에만 삽입됩니다 .0a

입력이 인터넷 개행 문자를 사용하고 프린터에 인터넷 개행 문자가 필요한 경우 0d이를 불가지론이라고 부르는 가장 깔끔한 방법 fold은 입력을 Unix 개행 문자로 변환하는 것입니다( \r개행 문자가 옆에 있다고 가정하고 모든 개행 문자 제거 \n). 출력은 다음과 같습니다. 전달된 fold후 back의 출력은 fold인터넷 줄 바꿈을 사용하도록 변환됩니다.

tr -d '\r' < exampleCRLF.txt \
| fold -s \
| awk '{printf "%s\r\n", $0}' \
| lpr -P PrintAdapter

dos2unix패키지 시스템(Fink, MacPorts, Homebrew)에서 설치하고 이를 개행 변환에 사용하는 것이 더 현명할 수 있습니다.

답변3

귀하의 구현에서는 foldCR을 공백으로 처리하는 것으로 보입니다.

CR이 있는 이유는 출력에 필요하기 때문이므로 처리를 수행할 때 CR에 대해 걱정하지 말고 마지막에 CR 문자를 정규화하세요.

… | sed 's/\r//g; s/$/\r/' | lpr

이 sed 명령은 모든 CR을 제거한 다음 각 줄 끝에 CR을 추가합니다. sed 구현이 이를 지원하지 않는 경우 \r리터럴 캐리지 리턴(^M) 문자를 삽입하십시오.


tr문자열 교체가 아닌 바이트 간 변환을 수행하므로 tr "\n" "\n\r"의미가 없습니다. (거짓 문자는 \r무시됩니다.) 문자열 교체를 수행하려면 sed와 같은 도구를 사용하십시오.

관련 정보