【发布时间】:2021-04-05 15:34:22
【问题描述】:
以下grep 不维护输入的ANSI 颜色编码。有没有办法保持原来的颜色编码?
$ builtin printf '%s\n' $'\e[33mx\e[0m' | grep $'\e\[33m'
x
【问题讨论】:
标签: linux command-line grep ansi-escape ansi-colors
以下grep 不维护输入的ANSI 颜色编码。有没有办法保持原来的颜色编码?
$ builtin printf '%s\n' $'\e[33mx\e[0m' | grep $'\e\[33m'
x
【问题讨论】:
标签: linux command-line grep ansi-escape ansi-colors
用--color=never禁用grep的着色:
$ 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
【讨论】:
grep 仅在输出为终端时默认着色的解释。 (如果添加另一个管道,例如builtin printf '%s\n' $'\e[33mx\e[0m' | grep $'\e\[33m'|cat,输出也会显示预期的颜色。)