如何使用grep为输出内容的不同部分设置不同颜色高亮
解决grep多内容不同高亮的问题
问题原因
你当前的管道方式之所以只显示JIRA REF的红色高亮,是因为每个grep进程仅能为自身匹配的内容设置高亮,且管道传递时,第二个grep会将第一个grep添加的高亮转义序列当作普通文本处理,最终覆盖或清除了之前的键高亮效果。
解决方案:用sed实现多模式不同高亮
sed支持对不同匹配规则设置独立的颜色转义码,不会过滤行,能完整保留目标内容并实现多色高亮。
命令示例
# 先提取目标行(包含2024-03-02的行及前后3-4行),再用sed设置双高亮 grep -A3 -B4 -P 2024-03-02 file.txt | sed -e 's/\(name\|displayName\|description\|exemptionCategory\|expiresOn\|policyDefinitionReferenceIds\|scope\)/\x1b[0;34m\1\x1b[0m/g' -e 's/\(JIRA REF\)/\x1b[0;31m\1\x1b[0m/g'
命令说明
\x1b[0;34m:ANSI蓝色转义码,用于高亮所有键(name、displayName等)\x1b[0;31m:ANSI红色转义码,用于高亮JIRA REF\x1b[0m:重置颜色,避免后续文本继承高亮- 两个
-e参数分别对应两组替换规则,实现双高亮效果
备选方案:保留grep管道的改进写法
如果坚持用grep管道,需添加--color=always确保高亮转义序列被保留,且最后一个grep不过滤行,写法如下:
grep -A3 -B4 -P 2024-03-02 --color=always file.txt \ | GREP_COLOR='mt=01;34' grep --color=always -P '(name|displayName|description|exemptionCategory|expiresOn|policyDefinitionReferenceIds|scope)' -A3 -B4 \ | GREP_COLOR='mt=01;31' grep --color=always -P 'JIRA REF|.' -A3 -B4
最后一个grep的JIRA REF|.确保所有行都被保留,同时高亮JIRA REF。
内容的提问来源于stack exchange,提问作者martyzee
相关产品推荐
相关产品推荐

