转义字符串上的颜色词

转义字符串上的颜色词

我知道如何在 bash 脚本中为字符串着色,以及如何计算字符串的字符数。我不知道如何计算带有\033[0;32m(红色)和\033[0m(透明颜色)等颜色标记的字符串。示例如下:

>> echo "This is a string" | wc -c
17

>> echo -e "\033[0;32mThis is a string\033[0m" | wc -c
28

>> echo "\033[0;32mThis is a string\033[0m" | wc -c
34

任何帮助表示赞赏。

答案1

解决方案是使用sed删除多余的字符,并计算剩下的字符。

#!/bin/bash
E=$'\e'   # An escape character, not everything understands \e but bash does
sed "s/${E}\\[[0-9;]*.//g" | wc -c

该模式还可以识别许多其他序列。如果您只想删除颜色,请将 更改.m

就我个人而言,我不会| wc -c在脚本中使用 ,能够剥离颜色序列作为独立的实用程序可能会很有用,正如 @waltinator 在评论中所要求的那样

相关内容