代码之家  ›  专栏  ›  技术社区  ›  Zitrax dudico

将grep管道输送至grep后保留着色

  •  122
  • Zitrax dudico  · 技术社区  · 15 年前

    有一个模拟的问题 Preserve ls colouring after grep’ing 但是,如果将彩色grep输出导入另一个grep中,则不保留该颜色,这让我很恼火。

    作为一个例子 grep --color WORD * | grep -v AVOID 不保留第一个输出的颜色。但对我来说 ls | grep FILE 保持颜色,为什么不同?

    3 回复  |  直到 9 年前
        1
  •  139
  •   Otto Allmendinger    15 年前

    grep 有时禁用颜色输出,例如在写入管道时。您可以用覆盖此行为 grep --color=always

    正确的命令行是

    grep --color=always WORD * | grep -v AVOID
    

    这很冗长,或者您也可以添加行

    alias cgrep="grep --color=always"
    

    对你 .bashrc 例如和使用 cgrep 作为彩色灰。重新定义时 格雷普 您可能会遇到依赖特定输出的脚本的问题 格雷普 也不喜欢ASCII转义码。

        2
  •  69
  •   andersonvom    13 年前

    一句忠告:

    使用时 grep --color=always ,将更改传递到下一个管道的实际字符串。这可能导致以下情况:

    $ grep --color=always -e '1' * | grep -ve '12'
    11
    12
    13
    

    即使选择 -ve '12' 应排除中间行,因为中间行之间有颜色字符 1 2 .

        3
  •  6
  •   Alex    9 年前

    虽然有点“hack-ish”,但它也可以简单地在管道末端重复grep命令。
    grep WORD * | grep -v AVOID | grep WORD

    推荐文章