sed를 사용하여 전체 단어를 검색하고 바꾸려면 어떻게합니까?
하기
sed -i 's/[oldtext]/[newtext]/g' <file>
[oldtext]
내가 원하지 않는 부분 일치도 대체 합니다.
답변
정규식에서 \ b는 단어 경계와 일치합니다 (즉, 첫 번째 단어 문자와 단어가 아닌 문자 사이의 위치).
$ echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
no bar embarassment
답변
Mac OS X에서 이러한 정규식 구문 은 전체 단어를 일치시키기 위해 sed 내에서 작동 하지 않습니다.
\bmyWord\b
\<myWord\>
지금 내 말을 듣고 나중에 믿으세요. 이 추악한 구문을 사용해야합니다.
/[[:<:]]myWord[[:>:]]/
예를 들어 전체 단어에 대해서만 mint 를 minty 로 바꾸려면 다음을 수행하십시오 .
sed "s/[[:<:]]mint[[:>:]]/minty/g"
출처 : re_format 매뉴얼 페이지
답변
사용 \b
단어 경계를 위해 :
sed -i 's/\boldtext\b/newtext/g' <file>
답변
내 컴퓨터 중 하나에서 ” \b
“(따옴표없이)로 단어를 구분하는 것이 작동하지 않았습니다. 해결책은 \<
시작 구분 기호에 ” \>
“를 사용하고 종료 구분 기호에 ” “를 사용하는 것입니다.
Joakim Lundberg 의 예 를 통해 설명하려면 :
$ echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
no bar embarassment
답변
쉘 명령에서 :
echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
또는:
echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
하지만 vim에 있다면 나중에 만 사용할 수 있습니다.
:% s/\<old\>/new/g
답변
$ echo "bar embarassment"|awk '{for(o=1;o<=NF;o++)if($o=="bar")$o="no bar"}1'
no bar embarassment
답변
