$ 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