SED를 사용하여 패턴을 기반으로 전체 단어 바꾸기

SED를 사용하여 패턴을 기반으로 전체 단어 바꾸기

대규모 자동화 테스트 환경에 반복해서 배포하는 여러 개의 가상 머신이 있습니다. 각 VM은 배포된 후 해당 호스트 이름을 /etc/hosts.

127.0.0.1     XXXX-testbot-XXX

배포되면 교체하고 싶습니다."xxxx-테스트봇-xxxx"~와 함께"yyyy-테스트봇-yyyy".

실제로 배포에 따라 호스트 이름은 다음과 같을 수도 있습니다.DDDD-SSSS-EEE-테스트봇-XYXXY"

"testbot"으로 단어를 찾아 새로운 값으로 바꾸면서 무언가를 찾고 있습니다.

나는 이것을 시도했다:

x="garn13-testbot-15"
sudo sed -i "s/\*\(testbot)*\).*/$x/g" /etc/hosts

그러나 이는 "testbot" 자체의 일치 항목을 대체할 뿐입니다.

Before:
127.0.1.1       garn13-testbot-12

After:
127.0.1.1       garn13-garn13-testbot-15

답변1

가장 간단한 대답은 구분 기호를 찾는 것입니다.

sed "s/[^ \t]*testbot[^ \t]*/$X/g"

이는 일치 알고리즘의 탐욕에 의존하며 공백이나 탭을 구분 기호로 사용하여 후행 흰색을 허용합니다.

관련 정보