为什么 bsd grep 会这样

为什么 bsd grep 会这样
$ grep --version
grep (BSD grep) 2.5.1-FreeBSD

-o当使用带有选项和多行搜索模式的bsd grep 时,我得到的结果似乎打印了两次。使用 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

相关内容