如何统计环境变量中可打印字符的数量(支持终端链接场景)
解决办法
要统计这种带终端链接的变量里的可打印字符数,核心思路就是先把那些看不见的链接控制代码删掉,再数剩下的字符长度,而且这个方法对不带链接的变量也完全兼容。
方法一:sed + wc组合实现
先过滤掉变量里的终端链接控制序列,再统计剩余字符数:
echo -n "$foo" | sed -e 's/\x1b]8;;.*\x07//g' | wc -m
简单说明:
\x1b对应终端里的转义符\e,\x07对应响铃符\a,这俩是链接控制序列的首尾标记sed会把所有夹在这俩标记中间的内容(包括标记本身)全部删除echo -n是避免额外输出换行符,防止统计结果多算1个字符
方法二:awk一步到位处理
直接用awk删除控制序列后输出剩余内容的长度:
echo -n "$foo" | awk '{gsub(/\x1b]8;;.*\x07/, ""); print length($0)}'
测试效果
拿你提供的foo变量测试,这两个命令都会输出14;如果换成普通变量比如bar="Hello World",会输出11,不管变量里有没有链接都能正常统计。
内容的提问来源于stack exchange,提问作者Dan Neal
相关产品推荐
相关产品推荐

