我在 OSX 上,但我怀疑这对这个问题没有太大影响。在我的中.bash_profile
,我默认使用别名grep
来获取颜色输出:
alias grep='grep --color=always'
我通常以类似于以下的方式在存储库中的文件中搜索内容:
grep --include=*.cpp -Ern . -e "(foo|bar)"
但我经常想进一步细化结果,通常使用 say 进行管道传输grep -v "colorbar"
。
问题是第二个grep
命令随后在彩色输出上运行,因此似乎无法匹配排除模式。
显然,我可以在没有颜色的情况下运行第一次搜索,然后一切都会正常工作,但如果有办法解决这个问题,我宁愿保留它们?
答案1
简单而明显的答案是:
- 将您的别名更改为 has
--color=auto
而不是always
- 随心所欲地通过管道传输 grep 命令
在管道末尾使用额外的 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 使用别名,删除这些文件,然后它就会恢复正常。