줄 종결자로 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
fold
Mac 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
귀하의 구현에서는 fold
CR을 공백으로 처리하는 것으로 보입니다.
CR이 있는 이유는 출력에 필요하기 때문이므로 처리를 수행할 때 CR에 대해 걱정하지 말고 마지막에 CR 문자를 정규화하세요.
… | sed 's/\r//g; s/$/\r/' | lpr
이 sed 명령은 모든 CR을 제거한 다음 각 줄 끝에 CR을 추가합니다. sed 구현이 이를 지원하지 않는 경우 \r
리터럴 캐리지 리턴(^M) 문자를 삽입하십시오.
tr
문자열 교체가 아닌 바이트 간 변환을 수행하므로 tr "\n" "\n\r"
의미가 없습니다. (거짓 문자는 \r
무시됩니다.) 문자열 교체를 수행하려면 sed와 같은 도구를 사용하십시오.