이렇게 하면 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)를 사용해 보세요.
답변2
나에게는 버그처럼 보입니다. grep
macports(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