Text-Formatting

如何對非拉丁字元使用 fmt 命令?

  • July 19, 2018

我需要使用 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
Ηαωε α νιψε
δαυ

如果可能的話,有人可以解釋為什麼會發生這種情況以及如何解決它嗎?

要回答您的問題,它不起作用,因為希臘字元是非拉丁字元、Unicode 字元,並且:

par不同, fmt 不支持 Unicode,…

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

補充筆記

不幸的是,關於如何做的問題的第二部分,

儘管似乎有一份關於如何包裝 Unicode 的最新技術報告,例如 Heninger, Unicode Line Breaking Algorithm , 2015-06-01 http://www.unicode.org/reports/tr14/但這似乎只是規範,沒有實際實現或提及軟體操作範例。您可以嘗試通過列出的電子郵件詢問作者。

fmt由於引用了 Wikipedia 文章par,並且可以通過 獲得apt-get,我決定在您發布的文本上嘗試一下。

但我沒有成功,它仍然沒有按照你希望的方式包裝:

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

man頁面非常困難,甚至作者都警告說它是:not well-written for the end-user,但如果你確定你可以試試你的運氣閱讀它。

引用自:https://unix.stackexchange.com/questions/255882