grep 管道输出时如何使 grep 尊重 ANSI 颜色转义?我很高兴使用其他东西(perl?)而不是 grep。
我的用户案例:我想要
gcc foobar.c | colorgcc | grep regexp
ls --color | grep filename
可以很好地处理颜色(在使用 ANSI 转义的 unix 终端上)。
我想要的行为测试示例:
echo -e "he\e[35mllo\e[00m" world |grep hell ==> he\e[35mllo\e[00m world
echo -e "\e[35m removed line\nhello\e[00m" world |grep hell ==> \e[35mhello\e[00m world
echo -e "\e[35m rem\e[1moved line\nhello\e[00m" world | grep hell ==> \e35m\e1mhello\e[00m world
目前第一行给出空字符串,第二行给出未着色的字符串'hello\e[00m world'。这里 \e[35m 和 \e00m 是颜色(属性)修饰符:字母的颜色由形式 \e[P1; 的最后几个颜色(属性)转义序列确定。P2; .. m 其中 P1、P2 等是数字序列;\e[P1m\e[P2m 等价于 \e[P1;P2m 。\e[0m 使颜色默认并忘记所有先前的 \e[..m 序列:\e[34m\e[0m 等价于 \e[0m。有几个独立的属性(粗体、背景颜色、前景/字母颜色);转义序列中的每个数字只影响其中一个。因此 \e[1m\e[35m 等价于 \e[1;35m 但不是 \e[35;1m 也不 \e[35m ; 但是,\e[34m\e[35m 等价于 \e[35m,因为它们都影响相同的属性(即,