
Ich habe eine Reihe virtueller Maschinen, die ich in einer großen automatisierten Testumgebung immer wieder bereitstelle. Jede VM schreibt nach der Bereitstellung ihren Hostnamen in /etc/hosts
.
127.0.0.1 XXXX-testbot-XXX
Wenn es eingesetzt wird, möchte ich ersetzen"xxxx-testbot-xxxx"mit"yyyy-testbot-yyyy".
Je nach Einsatz kann der Hostname sogarDDDD-SSSS-EEE-Testbot-XYXXY"
Ich suche etwas wie „Wort mit „Testbot“ suchen und durch neuen Wert ersetzen
Ich habe Folgendes versucht:
x="garn13-testbot-15"
sudo sed -i "s/\*\(testbot)*\).*/$x/g" /etc/hosts
Dies würde jedoch lediglich die Übereinstimmung mit „Testbot“ selbst ersetzen:
Before:
127.0.1.1 garn13-testbot-12
After:
127.0.1.1 garn13-garn13-testbot-15
Antwort1
Die einfachste Antwort besteht darin, nach dem/den Trennzeichen(n) zu suchen:
sed "s/[^ \t]*testbot[^ \t]*/$X/g"
Dies hängt von der Gier des Matching-Algorithmus ab und ermöglicht ein nachstehendes Weiß mit einem Leerzeichen oder einem Tabulator als Trennzeichen.