
大規模な自動テスト環境で何度もデプロイする仮想マシンが多数あります。各 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"
これは、一致アルゴリズムの貪欲さに依存し、末尾の空白とスペースまたはタブを区切り文字として使用できるようにします。