라틴어가 아닌 문자로 fmt 명령을 어떻게 사용합니까?

라틴어가 아닌 문자로 fmt 명령을 어떻게 사용합니까?

그리스어로 일부 텍스트 출력 형식을 지정하려면 fmt를 사용해야 하지만 라틴 문자와 동일하게 동작하지 않습니다. 예를 들어, 다음 15자 문장을 생각해 보세요.

라틴 문자의 경우:

 $echo "Have a nice day" | fmt -w 16
 Have a nice day

그러나 이상하게도 비라틴어 문자의 경우:

 $echo "Ηαωε α νιψε δαυ" | fmt -w 16
 Ηαωε α
 νιψε δαυ

실제로 위 문자열의 경우 개행 없이 인쇄되는 최소값은 다음과 같습니다 -w 28.

 $echo "Ηαωε α νιψε δαυ" | fmt -w 28
 Ηαωε α νιψε δαυ
 $echo "Ηαωε α νιψε δαυ" | fmt -w 27
 Ηαωε α νιψε
 δαυ

이런 일이 발생하는 이유와 해결 방법(가능한 경우)을 설명할 수 있는 사람이 있습니까?

답변1

귀하의 질문에 대답하자면, 그리스 문자는 라틴어가 아닌 문자, 유니코드 문자 및 다음과 같은 이유로 작동하지 않습니다.

같지 않은기준, fmt는 유니코드를 지원하지 않습니다.

https://en.wikipedia.org/wiki/Fmt

보충 설명

안타깝게도 질문의 두 번째 부분은 이를 수행하는 방법에 관한 것입니다.

최근에는 Heninger, Unicode Line Breaking Algorithm, 2015-06-01 등 유니코드를 래핑하는 방법에 대한 기술 보고서가 있는 것 같습니다.http://www.unicode.org/reports/tr14/그러나 이는 단지 사양일 뿐 실제 구현이나 소프트웨어 운영 사례에 대한 언급은 없는 것으로 보입니다. 나열된 이메일을 통해 작성자에게 문의할 수 있습니다.

Wikipedia 기사에 fmt가 언급되어 par있고 를 통해 사용할 수 있으므로 apt-get귀하가 게시한 텍스트에서 이를 시험해 보기로 결정했습니다.

하지만 성공하지 못했습니다. 여전히 원하는 방식으로 마무리되지 않습니다.

$ echo "Ηαωε α νιψε δαυ" | par 16gr
Ηαωε α
νιψε δαυ

man페이지는 매우 어렵고 작성자도 다음과 같이 경고합니다. not well-written for the end-user하지만 결심이 섰다면 읽어볼 수 있습니다.

답변2

fmt따라서 "라틴어가 아닌" 언어(예: 아마도 UTF-8)는 일반적으로 지원되지 않습니다. 를 사용할 수도 있습니다 par. 그렇게 합니다.

흥미롭게도 Solaris와 FreeBSD 매뉴얼 페이지는 fmt매우 유사하여 1980년대 중반 이후로 프로그램이 크게 개선되지 않았음을 나타냅니다.

par이는 귀하의 시스템에 대한 소프트웨어 패키지로 제공될 수 있습니다. 그렇지 않은 경우 여기에서 쉽게 컴파일할 수 있습니다.

http://www.nicemice.net/par/

반면에,적절한parUTF-8 지원 부족:

답변3

계획 9유틸리티는 일반적으로 UTF-8을 지원합니다. 다음을 설치하여 UNIX 시스템에 설치할 수 있습니다.plan9port. macOS에서는 Homebrew를 사용할 수 있습니다.

brew install plan9port

어느 설치그들의fmt명령을 받고 있습니다 9. 원하는 방식으로 작동하는 것 같습니다.

$ echo "Ηαωε α νιψε δαυ" | 9 fmt -w 16
Ηαωε α νιψε δαυ
$ echo "Ηαωε α νιψε δαυ" | 9 fmt -w 14
Ηαωε α νιψε
δαυ

관련 정보