我知道如何在 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 在评论中所要求的那样