Linux 如何在保持输入ansi颜色编码的情况下进行grep?

Linux 如何在保持输入ansi颜色编码的情况下进行grep?,linux,command-line,grep,ansi-escape,ansi-colors,Linux,Command Line,Grep,Ansi Escape,Ansi Colors,以下grep不保留输入ANSI颜色编码。有没有办法保持原来的颜色编码 $ builtin printf '%s\n' $'\e[33mx\e[0m' | grep $'\e\[33m' x 使用--color=never: $ builtin printf '%s\n' $'\e[33mx\e[0m' | grep --color=never $'\e\[33m' 否则,grep在搜索的字符串\e\[33m之前插入一个转义序列以对其进行着色,然后在之后插入另一个序列以重置所有着色,这反过来

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

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

使用
--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

使用
--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

我建议在解释中添加以下内容:
grep
仅在输出为终端时默认进行着色。(如果添加另一个管道,例如
builtin printf'%s\n'$'\e[33mx\e[0m'| grep$'\e\[33m'| cat
,则输出也将显示预期的颜色。)我不确定
grep--color
是否为grep的默认值(可能这是一个常见的别名。)
$'
中的反斜杠可能应该是
$\\\\'
。我建议添加一个解释,即
grep
默认情况下仅在输出为终端时才着色。(如果添加另一个管道,例如
内置printf'%s\n'$'\e[33mx\e[0m';grep$'\e\[33m'| cat
输出也将显示预期的颜色。)我不确定
grep--color
是否是grep的默认值(可能是一个常见的别名)。
$'
中的反斜杠可能应该是
$'\\\\'