如何在grep高亮匹配内容后恢复控制台ANSI蓝色输出?
控制台蓝色输出下grep匹配"error"标红后恢复全局蓝色的解决方法
核心问题
grep的--color=always会在匹配内容后插入ANSI重置颜色码(\033[0m),导致非匹配行或行末尾变回默认黑色,破坏全局蓝色的设置。
可行解决方案
方法1:grep + sed补全蓝色
先全局设置控制台为蓝色,再让sed在每行末尾重新添加蓝色代码,抵消grep的颜色重置:
# 先开启全局蓝色输出 echo -e "\033[34m" # 处理文件:grep标红error,sed补全蓝色 cat test.txt | grep --color=always 'error' | sed -e 's/$/\033[34m/'
方法2:用sed一次性完成全局蓝色+error标红
无需提前设置全局颜色,直接通过sed给所有内容套蓝色,同时单独标红"error":
sed -e 's/^/\033[34m/' -e 's/error/\033[31m&\033[34m/g' test.txt
s/^/\033[34m/:给每行开头添加蓝色ANSI码s/error/\033[31m&\033[34m/g:将所有"error"替换为「红色+原单词+恢复蓝色」的组合
方法3:替换grep输出中的重置颜色码
把grep输出里的重置码直接换成蓝色码,避免颜色回退:
echo -e "\033[34m" cat test.txt | grep -E --color=always 'error|$' | sed -e 's/\x1b\[0m/\x1b\[34m/g'
重置默认颜色
执行以下命令可退出蓝色模式,恢复控制台默认颜色:
echo -e "\033[0m"
内容的提问来源于stack exchange,提问作者diyes92182
相关产品推荐
相关产品推荐

