【问题标题】:How to grep with input ansi color encoding maintained?如何保持输入 ansi 颜色编码的 grep?
【发布时间】: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


    【解决方案1】:

    --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,输出也会显示预期的颜色。)
    猜你喜欢
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 2019-05-29
    • 1970-01-01
    • 2021-01-02
    相关资源
    最近更新 更多