Mac OS Xでgrep -o -wが期待した出力を提供しないのはなぜですか?

Mac OS Xでgrep -o -wが期待した出力を提供しないのはなぜですか?

これにより、echo foo bar baz | grep -o -w baz出力はfoo bar baz(そして追加の改行)です。
予想される出力は、baz-oオプションが一致する部分のみを表示する必要があるためです。
私はMac OS X 10.7.1を使用しており、grepのバージョンは次のとおりです。grep (GNU grep) 2.5.1

答え1

1つの解決策は、正規表現構文を使用してgrep単語の先頭と末尾に空の文字列を一致させることです!

# grep regex syntax for matching words only
man grep | less -p '\<'

# POSIX 1003.2 regular expression syntax for matching words only
# should work for sed, ed, ...
man re_format | less -p '\[\[:<:\]\]'

echo 'foo bar baz' | egrep -o '\<baz\>'

echo 'foo bar baz' | sed -n '/.*[[:<:]]\(baz\)[[:>:]].*/s//\1/p'

grep'フラグを使用する必要がある場合は、プリ-wコンパイルされたRudix 2010grepバイナリ(grep-2.5.4-1.dmg)を試してください。

http://rudix.org/packages-ghi.html#grep

答え2

私にとってはバグのように見えます。grepmacports(v 2.9)の機能を使用しても問題ない場合は、期待どおりに機能します。

2.5.1は最新バージョンとは距離が遠いようですが、Appleを使ってバグを埋めることができるようです。

答え3

10.8では、/usr/bin/grepこの問題のない他のバージョンのgrepに置き換えられました。

$ echo foo bar baz | grep -o -w baz
baz
$ grep -V
grep (BSD grep) 2.5.1-FreeBSD

10.7:

$ echo foo bar baz | grep -o -w baz
foo bar baz

$ grep -V
grep (GNU grep) 2.5.1

Copyright 1988, 1992-1999, 2000, 2001 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

答え4

grepまたは、次の方法で最新バージョンの GNU をインストールできます。自分で作った:

brew install grep

次に、次のようにします。

$ echo foo bar baz | ggrep -o -w baz
baz

関連情報