これにより、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)を試してください。
答え2
私にとってはバグのように見えます。grep
macports(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