如何使用输入的 ansi 颜色编码进行 grep 维护?

How to grep with input ansi color encoding maintained?

以下grep不维护输入的ANSI颜色编码。有没有办法保持原来的颜色编码?

$ builtin printf '%s\n' $'\e[33mx\e[0m' | grep $'\e\[33m' 
x

禁用 grep 的着色 --color=never:

$ builtin printf '%s\n' $'\e[33mx\e[0m' | grep --color=never $'\e\[33m'

否则,grep在搜索到的字符串前插入一个转义序列\e\[33m对其进行着色,然后在其后插入另一个序列重新设置所有着色,从而导致字母x不在输出上着色。

grep的默认着色模式是--color=auto,仅当输出是终端时才对输出着色。因此,另一种禁用着色的方法是将 grep 的输出重定向到终端以外的其他地方,例如cat:

$ builtin printf '%s\n' $'\e[33mx\e[0m' | grep $'\e\[33m' | cat