如何使用带有非拉丁字符的 fmt 命令?

geo*_*909 5 text-formatting

我需要使用 fmt 来格式化一些希腊语文本输出,但它的行为与拉丁字符不同。例如,考虑以下 15 个字符的句子。

带有拉丁字符:

 $echo "Have a nice day" | fmt -w 16
 Have a nice day
Run Code Online (Sandbox Code Playgroud)

但是,奇怪的是,使用非拉丁字符:

 $echo "???? ? ???? ???" | fmt -w 16
 ???? ?
 ???? ???
Run Code Online (Sandbox Code Playgroud)

事实上,对于上面的字符串,它打印没有换行符的句子的最小值是-w 28

 $echo "???? ? ???? ???" | fmt -w 28
 ???? ? ???? ???
 $echo "???? ? ???? ???" | fmt -w 27
 ???? ? ????
 ???
Run Code Online (Sandbox Code Playgroud)

如果可能的话,有人可以解释为什么会发生这种情况以及如何解决它吗?

cla*_*123 5

要回答您的问题,它不起作用,因为希腊字符是非拉丁字符、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/但这似乎只是规范,没有实际实现或提及软件操作示例。您可以尝试通过列出的电子邮件询问作者。

由于 Wikipedia 上的文章fmt提到了par,并且可以通过 获得apt-get,因此我决定在您发布的文本上尝试一下。

但是我没有成功,它仍然没有按照您希望的方式包装:

$ echo "???? ? ???? ???" | par 16gr
???? ?
???? ???
Run Code Online (Sandbox Code Playgroud)

man页面非常困难,甚至作者也警告说它是:not well-written for the end-user,但是如果您下定决心,您可以试试运气阅读它。