如何保持输入ansi颜色编码的grep?

问题描述

下面的 docker run --gpus all -it tensorflow/tensorflow:2.2.1-gpu bash 不保持输入的 ANSI 颜色编码。有没有办法保持原来的颜色编码

grep

解决方法

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