Bash – sed: replace ip in hosts file, using hostname as pattern


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
echo $IP

The result:

So, i have a line on hosts file with the old ip address:

and i want to update host file like this:

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.


Best Solution

You can use a simple shell script:

#! /bin/bash

IP=$(dig +short


sed -i "/$HOST/ s/.*/$IP\t$HOST/g" /etc/hosts


sed -i "/$HOST/ s/.*/$IP\t$HOST/g" /etc/hosts means in the line which contains $HOST replace everything .* by $IP tab $HOST.