gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:24:15 29 4
gpt4 key购买 nike

我使用 (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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com