colors - 如何从 fmt 中隐藏 ANSI 颜色转义代码

标签 colors ansi-escape

我使用 (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,但是当搜索字符串跨越多个单词时,这不起作用。

最佳答案

似乎没有一个好的方法可以使用 grep 和 fmt 来解决这个问题。我建议您先运行 fmt,然后使用 sed 而不是 grep 进行搜索。例如:

echo The search string will be highlighted red. | fmt -w 50 | sed ":a;$!N;$!ba;s/search[ \n]string/\x1b\[1;31m&\x1b\[0m/g"

关于colors - 如何从 fmt 中隐藏 ANSI 颜色转义代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1116938/

相关文章:

android - 如何为Android设计带有渐变和阴影的按钮?

r - 第一次执行代码时颜色不正确

windows - 从 Windows 批处理文件中检测与 ANSI 兼容的控制台?

terminal - ANSI 转义序列

c# - 了解 VT100/ANSI 终端

C ANSI 转义码

java - HSL 到 RGB 转换器不工作

image - 编写颜色配置文件以跨多个扫描仪标准化颜色

html - 如何让 SVG 图像从 HTML 文档继承颜色?

python - 在 Python 3 中使用 ANSI 序列确定终端光标位置