I'm learning about sed but it is very difficult to me understand it.
I have adsl with dynamic ip so and i want to put current ip on hosts file.
This following script just tells me the current wan ip address and no more:
IP=$(dig +short myip.opendns.com @resolver1.opendns.com)
echo $IP
The result:
192.42.7.73
So, i have a line on hosts file with the old ip address:
190.42.44.22 peep.strudel.com
and i want to update host file like this:
192.42.7.73 peep.strudel.com
How can i do it? I think i can use the hostname as pattern...
The reason of doing this is because my server is a client of my router, so it access the internet thru its gateway and not directly. And postfix always is logging me that "connect from unknown [x.x.x.x]" (where x.x.x.x is my wan ip!) and it can't resolve that ip. I think that maybe if i specify this relating with my fqdn host/domain, on hosts file it will works better.
Thanks Sergio.
You need to include the sed code inside double quotes so that the used variable got expanded.
Add
-i
parameter to save the changes made. In basic sed\(..\)
called capturing group.\{min,max\}
called range quantifier.Example:
using sed
.
[0-9]+\.
find all lines that matches 1 or more digits with this pattern 4 consecutive times then patternpeep.strudel.com
.The parenthesis around the patternpeep.strudel.com
save it as\1
then replace the whole patten with your variable and your new ip.another approach:instead of saving pattern to a variable named IP, you can execute your command line inside sed command line to get the new IP .
using gawk
You can use a simple shell script:
Explanation:
sed -i "/$HOST/ s/.*/$IP\t$HOST/g" /etc/hosts
means in the line which contains$HOST
replace everything.*
by$IP
tab$HOST
.