Mac OS X에서 grep -o -w가 예상한 출력을 제공하지 않는 이유는 무엇입니까?

Mac OS X에서 grep -o -w가 예상한 출력을 제공하지 않는 이유는 무엇입니까?

이렇게 하면 echo foo bar baz | grep -o -w baz출력은 foo bar baz(그리고 추가 개행)입니다.
예상되는 출력은 baz-o 옵션이 일치하는 부분만 표시해야 하기 때문입니다.
저는 Mac OS X 10.7.1을 사용하고 있으며 grep 버전은 다음과 같습니다.grep (GNU grep) 2.5.1

답변1

한 가지 해결 방법은 정규식 구문을 사용하여 grep단어의 시작과 끝에서 빈 문자열을 일치시키는 것입니다!

# grep regex syntax for matching words only
man grep | less -p '\<'

# POSIX 1003.2 regular expression syntax for matching words only
# should work for sed, ed, ...
man re_format | less -p '\[\[:<:\]\]'

echo 'foo bar baz' | egrep -o '\<baz\>'

echo 'foo bar baz' | sed -n '/.*[[:<:]]\(baz\)[[:>:]].*/s//\1/p'

grep' 플래그를 사용해야 한다면 -w미리 컴파일된 Rudix 2010 grep바이너리(grep-2.5.4-1.dmg)를 사용해 보세요.

http://rudix.org/packages-ghi.html#grep

답변2

나에게는 버그처럼 보입니다. grepmacports(v 2.9)의 기능을 사용해도 괜찮다면 예상대로 작동할 것입니다.

2.5.1은 최신 버전과는 거리가 먼 것 같지만 Apple을 사용하여 버그를 채울 수 있을 것 같습니다.

답변3

10.8에서는 /usr/bin/grep이 문제가 없는 다른 버전의 grep으로 대체되었습니다.

$ echo foo bar baz | grep -o -w baz
baz
$ grep -V
grep (BSD grep) 2.5.1-FreeBSD

10.7:

$ echo foo bar baz | grep -o -w baz
foo bar baz

$ grep -V
grep (GNU grep) 2.5.1

Copyright 1988, 1992-1999, 2000, 2001 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

답변4

grep또는 다음 방법으로 최신 버전의 GNU를 설치할 수 있습니다.스스로 만든:

brew install grep

그런 다음 다음을 수행하십시오.

$ echo foo bar baz | ggrep -o -w baz
baz

관련 정보