$ 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