sed: ersetzen Sie die ip in die hosts-Datei mit Hostnamen als Muster
Ich bin zu lernen, über die sed, aber es ist sehr schwierig für mich zu verstehen.
Habe ich adsl mit dynamischer ip so und ich möchte die aktuelle ip auf die hosts-Datei.
Das folgende Skript aus, nur sagt mir die aktuelle wan-ip-Adresse und nicht mehr:
IP=$(dig +short myip.opendns.com @resolver1.opendns.com)
echo $IP
Das Ergebnis:
192.42.7.73
So, ich habe eine Zeile in die hosts-Datei mit der alten ip-Adresse:
190.42.44.22 peep.strudel.com
und ich möchte aktualisieren host-Datei wie folgt:
192.42.7.73 peep.strudel.com
Wie kann ich es tun? Ich denke, ich kann den Hostnamen als Muster...
Grund, dies zu tun ist, weil mein server ist ein client des Routers, so dass es den Zugriff auf das internet durch seine-gateway und nicht direkt. Und postfix immer bei der Anmeldung mir, dass "connect from unknown [x.x.x.x]" (x wo.x.x.x ist meine wan-ip!) und es nicht lösen kann, die ip. Ich denke, dass vielleicht, wenn ich geben Sie dies im Zusammenhang mit meinem fqdn host/domain, auf die hosts-Datei wird es besser funktioniert.
Dank
Sergio.
Du musst angemeldet sein, um einen Kommentar abzugeben.
mit sed
.
[0-9]+\.
finden Sie alle Zeilen, die übereinstimmungen 1 oder mehr Ziffern mit der dieses Muster 4 mal hintereinander dann Musterpeep.strudel.com
.Die Klammern um das Musterpeep.strudel.com
speichern Sie es als\1
ersetzen Sie dann die ganze patten mit Ihrem Variablen und Ihre neue ip.anderen Ansatz:statt zu sparen Muster eine variable namens IP, führen Sie die Befehlszeile innerhalb der sed-Befehlszeile, um die neue IP .
mit gawk
Können Sie ein einfaches shell-Skript:
Erklärung:
sed -i "/$HOST/s/.*/$IP\t$HOST/g" /etc/hosts
bedeutet in der Zeile, die enthält$HOST
alles ersetzen.*
durch$IP
Registerkarte$HOST
.dig
gibt immer eine null exit-code, so könnte mess up your hosts-Datei. Ausgezeichnete Verwendung vonsed
sollte akzeptiert wurden, beantworten.Müssen Sie den sed-code in doppelten Anführungszeichen, so dass die verwendeten Variablen erweitert habe.
Hinzufügen
-i
parameter, um die änderungen zu speichern gemacht. In basic sed\(..\)
genannt-capturing-group.\{min,max\}
genannten Bereich-Quantifizierer.Beispiel: