답변:
정규식에서 \ b는 단어 경계와 일치합니다 (즉, 첫 번째 단어 문자와 단어가 아닌 문자 사이의 위치).
$ echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
no bar embarassment
\band\b
저장 일 :
Mac OS X에서 이러한 정규식 구문 은 전체 단어를 일치시키기 위해 sed 내에서 작동 하지 않습니다.
\bmyWord\b
\<myWord\>
지금 내 말을 듣고 나중에 믿으세요. 이 추악한 구문을 사용해야합니다.
/[[:<:]]myWord[[:>:]]/
예를 들어 전체 단어에 대해서만 mint 를 minty 로 바꾸려면 다음을 수행하십시오 .
sed "s/[[:<:]]mint[[:>:]]/minty/g"
출처 : re_format 매뉴얼 페이지
sed
MacPorts 또는 Homebrew를 통해 GNU (및 기타 모든 GNU 도구)를 설치 하고 PATH
. Mac을 상당히 유용하게 만들 수 있습니다.
brew install coreutils
모든 gnu 도구의 접두사 인을 확실히 제안 할 수 있습니다.
brew install gnu-sed
사용gsed
perl -pe 's|\bone\b|two|g'
. sed가 여기저기서 실패하는 동안 안정적으로 작동합니다.
내 컴퓨터 중 하나에서 " \b
"(따옴표없이)로 단어를 구분하는 것이 작동하지 않았습니다. 해결책은 \<
시작 구분 기호에 " \>
"를 사용하고 종료 구분 기호에 " "를 사용하는 것입니다.
Joakim Lundberg 의 예 를 통해 설명하려면 :
$ echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
no bar embarassment
$ echo "bar embarassment"|awk '{for(o=1;o<=NF;o++)if($o=="bar")$o="no bar"}1'
no bar embarassment
echo " bar embarassment " | awk '{for(o=1;o<=NF;o++)if($o=="bar")$o="no bar"}1' | cat -E
gives no bar embarassment$
.