특정 컨텍스트를 기반으로 셸에서 문자열 교체

특정 컨텍스트를 기반으로 셸에서 문자열 교체

sed/grep을 사용하여 파일의 문자열을 바꾸고 싶지만 문자열이 다른 문자열과 혼합되어 있습니다.

예:

sed -i 's/php/vinu/g' test.yml  # to replace string php with vinu

테스트.yml

php
phpehealth
dophp
testingphpin

위의 yml 파일에는 여러 개의 "php" 문자열이 포함되어 있지만 "php" 문자열을 "vinu"로 바꾸고 나머지는 건드리면 안 됩니다.

예상 출력:

vinu
phpehealth
dophp
testingphpin

답변1

귀하의 sed 버전이 이를 지원하는 경우 정규 표현식에서 단어 경계를 사용하십시오.

sed -i 's/\<php\>/vinu/g' 

답변2

단어 경계를 지정하는 또 다른 방법:

sed -i 's/\bphp\b/vinu/g' file

관련 정보