我使用(GNU)fmt
用漂亮的(“最佳”)换行符来格式化较长的文本。但是,如果文本包含任何 ANSI 颜色转义序列(从不显示,仅用于在显示文本时为文本着色),则将fmt
这些视为正常字符,并计算错误的行长。
我不确定文字转义字符在这里的工作情况如何,所以这是一个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
before grep
,但是当搜索字符串跨越多个单词时,这不起作用。