grep -o OSXでの動作

grep -o OSXでの動作

Linuxでは、echo foo | grep -o '^.'最初の文字を取得するとf期待どおりに印刷されます。 (わかりました、| cut -c1より速いかもしれません。)

ただし、OSXでは、3つの一致(3行)で同じ結果を実行します。

f
o
o

何してるの?そのオプションがなくても-o(私の環境では)出力色を見ると、最初の文字だけでなく行全体が一致することがわかります。

誰かが私を実現できますか?

答え1

あなたはこれが興味深い行動であることに気づきました。

これを「バグ」に分類するのは間違いです。POSIX-oオプションが指定されていません。grep。あなたはこれがどのように機能するのか気に入らないかもしれず、grepBSDとGNUの違いが迷惑になることに同意します。ただし、この動作は実際にBSDのマニュアルページに記載されている内容と競合しません。まだバグだと言えば、それは、あなたのより、男性。 :)

おそらく、この代替デモがなぜ機能するのかを示します。

$ echo foofoofoo | grep -o foo
foo
foo
foo

つまり、BSDgrepとGNUの両方grepが表示されます。みんな最初の行だけでなく、行の一部も一致させます。違いは、BSDがgrep一致する部分を消費してから再度一致させることでこれを行うようです。f例から先行を削除すると、次のo項目も一致し、次の項目も一致することがわかります。

この問題を解決する1つの方法はインストールすることです。自分で作った、そして言ったbrew install grep。これによりGNUが提供されるため、grep基本ggrepバージョンと競合しません。 GNUはgrep上記の例と同じ動作を提供しますが、いくつかの違いがあります。

 $ echo foofoofoo | ggrep -o ^foo
 foo

BSDはgrep3秒を印刷しますfoo

基本バージョンをシンボリックリンクに置き換える場合は、一部のオペレーティングggrepシステムのアップデートがそれを置き換えることに注意してください。

関連情報