Programming

sed 전체 단어 검색 및 교체

procodes 2020. 8. 6. 22:22
반응형

sed 전체 단어 검색 및 교체


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[[:>:]]/

예를 들어, 전체 단어에 대해서만 민트민트 로 바꾸려면 :

  • 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

참고 URL : https://stackoverflow.com/questions/1032023/sed-whole-word-search-and-replace

반응형