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"

これは、一致アルゴリズムの貪欲さに依存し、末尾の空白とスペースまたはタブを区切り文字として使用できるようにします。

関連情報