sed: remplacer ip dans le fichier hosts, en utilisant le nom d'hôte comme modèle
Je suis en train d'apprendre à propos de sed mais il est très difficile pour moi de le comprendre.
J'ai l'adsl avec ip dynamique et je veux mettre des ip actuelle sur le fichier hosts.
Ce script suivant me dit juste l'adresse ip wan en cours et rien de plus:
IP=$(dig +short myip.opendns.com @resolver1.opendns.com)
echo $IP
Le résultat:
192.42.7.73
J'ai une ligne sur fichier hosts avec l'ancienne adresse ip:
190.42.44.22 peep.strudel.com
et je veux mettre à jour le fichier host comme ceci:
192.42.7.73 peep.strudel.com
Comment puis-je le faire? Je pense que je peux utiliser le nom d'hôte comme motif...
La raison de le faire, c'est parce que mon serveur est un client de mon routeur, il accéder à internet à travers ses passerelle et non pas directement. Et postfix est toujours la journalisation moi qui "se connecter à partir inconnu [x.x.x.x] (où x.x.x.x est mon ip wan!) et il ne peut pas résoudre que la propriété intellectuelle. Je pense que peut-être si je préciser cette relation avec mon nom de domaine complet de l'hôte ou du domaine de l', sur fichier hosts ça fonctionne mieux.
Merci
Sergio.
OriginalL'auteur sergius | 2015-02-11
Vous devez vous connecter pour publier un commentaire.
à l'aide de sed
.
[0-9]+\.
trouver toutes les lignes qui correspond à 1 ou plusieurs chiffres avec ce modèle 4 fois de suite alors patronpeep.strudel.com
.Les parenthèses autour du motifpeep.strudel.com
de l'enregistrer comme\1
puis remplacer l'ensemble de la patten avec votre variable et votre nouvelle adresse ip.une autre approche:au lieu de sauver modèle à une variable nommée IP, vous pouvez exécuter votre ligne de commande à l'intérieur de sed ligne de commande pour obtenir la nouvelle adresse IP .
à l'aide de gawk
super! :D. j'ai pris en compte les espaces dans ma ligne de commande en utilisant ce morceau de code " +" après peep.strudel.com
I +1 cette question, de sorte que vous pouvez atteindre 15 rep de vote!
merci, je suis tellement novice 🙂
OriginalL'auteur repzero
Vous pouvez utiliser un simple script shell:
Explication:
sed -i "/$HOST/s/.*/$IP\t$HOST/g" /etc/hosts
signifie dans la ligne qui contient$HOST
remplacer tout.*
par$IP
onglet$HOST
.Heureux, il a aidé.
Une chose que j'ai trouvé est
dig
renvoie toujours zéro code de sortie pourrait gâcher votre fichier hosts. Excellente utilisation de lased
doit avoir été accepté de répondre.OriginalL'auteur Tiago Lopo
Vous devez inclure le sed code à l'intérieur de guillemets doubles, de sorte que la variable utilisée s'est développée.
Ajouter
-i
paramètre pour enregistrer les modifications apportées. Dans la base sed\(..\)
appelé capture d'un groupe.\{min,max\}
appelée portée des quantificateurs.Exemple:
Accepter que quelqu'un d'ici les réponses qui vous ont aidé le plus.
OriginalL'auteur Avinash Raj