Mac OS X 终端中的 Grep -- 只显示一种颜色

Ste*_* Lu 9 terminal grep command-line colors macos

我习惯于 grep 能够为文件名、行号和匹配本身着色。这三个应该是不同的颜色。这在 Linux 终端甚至 Windows 上的 MinGW 上都可以完美运行,但在 OS X 上,即使我设置了 GREP_COLOR,我也只能在匹配的结果上获得颜色。

是不是操作系统自带的grep版本太旧了?

10.7.3 在 MBA 13" 上使用 Terminal.app。

slh*_*hck 9

正如 Ignacio 已经说过的,OS X grep 有点过时了(它的版本是 2.5.1)。不过,您可以安装最新的 GNU grep。

与往常一样,您可以通过Homebrew在 OS X 上安装大多数缺少的 Linux 工具:

brew install grep
Run Code Online (Sandbox Code Playgroud)

这将安装ggrep以免覆盖您现有的grep. 如果您想更改它,请参阅信息消息:

所有命令都以前缀“g”安装。如果您需要使用具有正常名称的这些命令,您可以将“gnubin”目录从您的 bashrc 添加到您的 PATH 中,例如:

PATH="$(brew --prefix)/opt/grep/libexec/gnubin:$PATH"
Run Code Online (Sandbox Code Playgroud)

此外,您可以启用颜色选项并默认排除某些目录,这可能会使其更有用:

alias grep="ggrep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn,.idea,.tox}"
Run Code Online (Sandbox Code Playgroud)

将此添加到您~/.bash_profile或您正在使用的任何外壳配置中。

  • @StevenLu,你可能想把 `/usr/local/bin` 放在 `/usr/bin` 之前。例如,您可以通过编辑`/etc/paths` 来全局执行此操作,或者让您的shell 启动脚本(例如,`~/.bash_profile`)编辑`PATH` 以更改顺序。 (2认同)
  • @StevenLu,请参阅[修改路径,使 /usr/local/bin 位于 /usr/bin 之前](http://apple.stackexchange.com/q/49389/6883)。 (2认同)