过滤 grep 的彩色输出

过滤 grep 的彩色输出

我在 OSX 上,但我怀疑这对这个问题没有太大影响。在我的中.bash_profile,我默认使用别名grep来获取颜色输出:

alias grep='grep --color=always'

我通常以类似于以下的方式在存储库中的文件中搜索内容:

grep --include=*.cpp -Ern . -e "(foo|bar)"

但我经常想进一步细化结果,通常使用 say 进行管道传输grep -v "colorbar"

问题是第二个grep命令随后在彩色输出上运行,因此似乎无法匹配排除模式。

显然,我可以在没有颜色的情况下运行第一次搜索,然后一切都会正常工作,但如果有办法解决这个问题,我宁愿保留它们?

答案1

简单而明显的答案是:

  1. 将您的别名更改为 has--color=auto而不是always
  2. 随心所欲地通过管道传输 grep 命令
  3. 在管道末尾使用额外的 grep 命令来为您想要的结果着色,例如:

    grep --include=*.cpp -Ern . -e "(foo|bar)" | grep -v colorbar | grep -E -e "(foo|bar)"
    

但是,这不会很好地为您的文件名和文件编号着色。

另一种可能的解决方案要棘手得多,但仍然值得一提:您可以使用pcregrep一个更精美的正则表达式来处理一个正则表达式中的所有过滤。

答案2

删除文件 /etc/profile.d/colorgrep* 在较新版本的 os linux 中,他们强制为 greg/egrep 和 fgreg 使用别名,删除这些文件,然后它就会恢复正常。

相关内容