【问题标题】:Grep behavior on OS X with --only-matching使用 --only-matching 在 OS X 上的 Grep 行为
【发布时间】:2015-01-24 21:45:21
【问题描述】:

当我运行以下命令时:

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

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

1
2
3
4
1
2
3
4

为什么?我希望得到这个输出:

1
1

谁能重现这个问题?我在 Ubuntu 14.04 上得到了预期的输出。

【问题讨论】:

标签: shell unix grep


【解决方案1】:

问题似乎在于 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

【讨论】:

    【解决方案2】:

    我不能告诉你出了什么问题,但请尝试解决方法:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-19
      • 2014-06-06
      • 2010-11-30
      • 2014-12-18
      • 2012-01-19
      相关资源
      最近更新 更多