Ersetzen Sie mit SED ein ganzes Wort basierend auf einem Muster

Ersetzen Sie mit SED ein ganzes Wort basierend auf einem Muster

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.

verwandte Informationen