Ich verwende (GNU) fmt
um längere Texte mit schönen ('optimalen') Zeilenumbrüchen zu formatieren. Enthält der Text jedoch ANSI-Farb-Escape-Sequenzen (die nie angezeigt werden und nur dazu dienen, den Text bei der Anzeige einzufärben), kann es zu einer Fehlfunktion kommen, fmt
betrachtet diese als normale Zeichen und berechnet die falschen Zeilenlängen.
Ich bin mir nicht sicher, wie gut wörtliche Escape-Zeichen hier funktionieren, deshalb hier ein einfaches Beispiel mit grep
um die ANSI-Sequenzen zu erzeugen. Beginnen wir mit einer langen Zeichenkette zum Formatieren.
string="Here’s an example of a rather long \
string with quite a few words in the middle \
that grep chooses to colour red."
Wenn wir nicht auf die grep
passt, funktioniert alles bestens:
echo $string | grep --color=no i | fmt -w 50
Aber wenn wir sie hervorheben/einfärben, fmt
geht davon aus, dass die Zeilen, die den Buchstaben "i" enthalten, viel länger sind, als sie tatsächlich sind, und sie werden als ziemlich kurze Zeilen angezeigt, wenn sie in einem Terminal angezeigt werden.
echo $string | grep --color=yes i | fmt -w 50
Gibt es eine Möglichkeit, dies zu vermeiden? Für dieses Beispiel könnte ich natürlich Folgendes verwenden fmt
vor grep
aber wenn sich der Suchbegriff über mehrere Wörter erstreckt, funktioniert das nicht.