具有--only-matching的OS X上的Grep行为

tba*_*tba 2 unix shell grep

当我运行以下命令时:

printf "1234\n1234" | grep -o '^.'
Run Code Online (Sandbox Code Playgroud)

我在带有zsh 5.0.5的OSX 10.10上获得以下输出:

1
2
3
4
1
2
3
4
Run Code Online (Sandbox Code Playgroud)

为什么?我希望此输出改为:

1
1
Run Code Online (Sandbox Code Playgroud)

任何人都可以重现此问题吗?我在Ubuntu 14.04上获得了预期的输出。

koj*_*iro 5

问题似乎是苹果已经选择grep在其最新操作系统上安装一个十多年的版本。它有一些错误,包括您指出的错误。我唯一能认真建议的事情是,您使用像homebrew这样的程序包管理器来升级用于日常工作的grep。

$ grep --version
grep (BSD grep) 2.5.1-FreeBSD
$ grep --color=never -o ^. <<< ab
a
b
$ brew install grep
==> Installing grep from homebrew/homebrew-dupes
<SNIP>
$ ggrep --version
ggrep (GNU grep) 2.21
$ ggrep --color=never -o ^. <<< ab
a
Run Code Online (Sandbox Code Playgroud)