bsd grepがなぜこのように動作するのですか?

bsd grepがなぜこのように動作するのですか?
$ grep --version
grep (BSD grep) 2.5.1-FreeBSD

-oオプションと複数行検索モードでbsd grepを使用すると、2回印刷されるように見える結果が得られます。この動作はGNU grepを使用して再現できません。

$ printf '%s\n' foo foo bar bar | grep -o $'foo\nfoo'
foo
foo
foo
foo
$ echo foo | grep -o foo
foo
$ printf '%s\n' foo foo bar bar | grep -o foo
foo
foo
$ printf '%s\n' foo bar | grep -o $'foo\nfoo'
foo
foo
$ printf '%s\n' foo foo bar bar | grep $'foo\nfoo'
foo
foo
$ printf '%s\n' foo foo bar bar | grep -co $'foo\nfoo'
2

これはバグですか、それとも別の説明がありますか?

編集する:

複数行の文字列が別々の検索パターンとして扱われるように見えますが、拡張正規表現を使用する場合と動作はまだ異なります。

$ printf '%s\n' foo foo bar bar | grep -o $'foo\nbaz\nfoo'
foo
foo
foo
foo
$ printf '%s\n' foo foo bar bar | grep -Eo 'foo|baz|foo'
foo
foo
$ printf '%s\n' foo foo bar bar | grep -o -e foo -e foo
foo
foo
foo
foo
$ printf '%s\n' foo foo bar bar | grep -e foo -e foo
foo
foo
$ printf '%s\n' foo foo bar bar | grep -o -e foo -e foo -e foo
foo
foo
foo
foo
foo
foo

ベストアンサー1

おすすめ記事