如何从 bash 中的字符串中删除着色序列?

How to delete coloring sequences from string in bash?

我应该如何从 Bash 中的字符串中删除所有颜色控制序列(甚至所有不可打印的序列)?

例如,我有一个带有颜色开关的字符串:

a="\e[0;31m->\e0m"

如果我会回应它

echo -e "$a"

会打印两个彩色字符-> - 我想要得到的没有任何颜色的字符串。

在我的实际情况下,我正在脚本中构建彩色字符串,所以我不能将结果硬编码为常量,而且我不想将脚本的大小加倍来构建彩色和非彩色结果.

如果答案会删除所有的转义序列,而不仅仅是着色的,那就没问题了。字符串可以包含 Unicode。

$ a="\e[0;31m->\e0m"
$ echo $a | sed 's/\e[^m]*m//g'
->

是这样的吗?