Я использую (GNU) fmt
для форматирования длинных текстов с хорошими («оптимальными») переносами строк. Однако, если текст содержит какие-либо последовательности выхода цвета ANSI (которые никогда не отображаются и служат только для окраски текста при его отображении), fmt
считает их обычными символами и вычисляет неправильную длину строки.
Я не уверен, как здесь работают хорошие буквенные escape-символы, поэтому вот простой пример использования grep
для генерации последовательностей ANSI. Давайте начнем с длинной строки для форматирования.
string="Here’s an example of a rather long \
string with quite a few words in the middle \
that grep chooses to colour red."
Если мы не выделяем совпадения grep
, все работает нормально:
echo $string | grep --color=no i | fmt -w 50
Но если мы выделим / раскрасим их, fmt
считает, что строки, содержащие букву "i", намного длиннее, чем они есть на самом деле, и они отображаются как довольно короткие строки при отображении в терминале.
echo $string | grep --color=yes i | fmt -w 50
Есть ли способ избежать этого? Для этого примера я, конечно, мог бы использовать fmt
до grep
, но когда строка поиска занимает несколько слов, это не сработает.