OS X上的Grep行为与--only匹配

时间:2015-01-24 21:45:21

标签: shell unix grep

当我运行以下内容时:

printf "1234\n1234" | grep -o '^.'

我在OSX 10.10上使用zsh 5.0.5获得以下输出:

1
2
3
4
1
2
3
4

为什么呢?我期待这个输出:

1
1

有人可以重现这个问题吗?我在Ubuntu 14.04上获得了预期的输出。

2 个答案:

答案 0 :(得分:5)

问题似乎是Apple已经选择在其最新的操作系统上拥有一个超过十年的grep版本。它有错误including the one you point out。我唯一可以认真建议的是你使用像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

答案 1 :(得分:0)

我无法告诉你有什么问题,但尝试解决方法:

printf "1234\n1234" | awk -vFS= '{print $1}'
1
1

通过将FS设置为空,每个字符都会成为单独的字段,然后打印第一个字段$1

如果-FS=不起作用,请尝试-vFS=""