如何通过管道传输至grep时保留输入内容的颜色?
解决管道传输后保留原始命令颜色且grep不额外着色的方法
要实现git diff | grep world后仍保留git diff原本的红、绿颜色,需要搞定两个关键点:
- 让原始命令(比如git diff)在管道输出时也强制输出颜色
- 让grep关闭自身的匹配内容着色功能
针对git diff的具体命令
直接给git diff加--color参数,同时给grep加--color=never参数:
git diff --color | grep --color=never world
或者用环境变量强制git输出颜色,效果完全一致:
GIT_FORCE_COLOR=1 git diff | grep --color=never world
通用命令的处理思路
如果是其他带颜色输出的命令(比如ls),通常需要用--color=always参数强制输出颜色,再配合grep的--color=never:
ls --color=always | grep --color=never 目标关键词
原理说明
- 大部分命令会检测输出是否为终端(TTY),如果是管道输出就自动关闭颜色,所以需要加参数或环境变量强制开启颜色输出
- grep默认会给匹配到的内容添加额外颜色,
--color=never会完全禁用grep的着色功能,只保留上游命令的原始色彩
内容的提问来源于stack exchange,提问作者sjsawyer
相关产品推荐
相关产品推荐

