Как использовать команду 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 Ηαωε α νιψε δαυ 

Может ли кто-нибудь объяснить, почему это происходит и как его исправить, если это возможно?

2 Solutions collect form web for “Как использовать команду fmt с нелатинскими символами?”

Чтобы ответить на ваш вопрос, он не работает, потому что греческие символы не латинские, символы 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 относится к par , и она была доступна через apt-get , я решил попробовать ее на вашем опубликованном тексте.

Но я не увенчался успехом, он все равно не обертывается так, как вы пожелаете:

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

Страница руководства была достаточно сложной, и даже автор предупреждал, что это было: not well-written for the end-user , но если вы решились, вы можете попробовать свою удачу, читая ее.

fmt как таковой вообще не поддерживает «нелатинский» (в вашем примере, вероятно, UTF-8). Возможно, вы можете использовать par , который это делает.

Интересно, что справочные страницы Solaris и FreeBSD для fmt очень похожи, намекая, что с середины 80-х годов программа заметно улучшилась:

  • Solaris
  • FreeBSD

par может быть доступен как пакет для вашей системы. Если нет, его легко компилировать и найти здесь:

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

С другой стороны, правильной поддержки UTF-8 в par не хватало:

  • Re: Добавление поддержки UTF-8 в textproc / par показывает проблемы с включением улучшений такого рода.
  • Журналы отчетов об ошибках Debian – # 310495 Параметр: не обрабатывает многобайтовые символы UTF-8, правильно был открыт некоторое время
Interesting Posts
Linux и Unix - лучшая ОС в мире.