User Tools

Site Tools


sed:change:change_lines_in_a_file

SED - Change - Change lines in a file

This script will obtain the current IP address for different sites and update the /etc/hosts file with the correct IP address.

It could be run through Cron to ensure that the host file keeps an updated list of IPs.


Input file

Assuming /etc/hosts contains:

/etc/hosts
1.2.3.4  restrict.youtube.com
1.2.3.4  restrictmoderate.youtube.com
1.2.3.4  strict.bing.com
1.2.3.4  forcesafesearch.google.com
1.2.3.4  safe.duckduckgo.com

Script using dig

update_hosts.sh
#!/bin/bash
 
update_ip_address() {
file=/etc/hosts
if [[ $(grep $1 $file) ]]; then
	IP=$(dig +noall +answer +short @8.8.8.8 $1 | \
		grep -oE '((1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.){3}((1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]))')
	sed -i "/$1/ s/.*/$IP\t$1/g" $file
fi
}
 
update_ip_address restrict.youtube.com
update_ip_address restrictmoderate.youtube.com
update_ip_address strict.bing.com
update_ip_address forcesafesearch.google.com
update_ip_address safe.duckduckgo.com

Script using nslookup

update_hosts.sh
#!/bin/bash
 
update_ip_address() {
file=/etc/hosts
if [[ $(grep $1 $file) ]]; then
	IP=$(nslookup -query=A $1 8.8.8.8 | grep 'Address:' | tail -1 | \
		grep -oE '((1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.){3}((1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]))')
	sed -i "/$1/ s/.*/$IP\t$1/g" $file
fi
}
 
update_ip_address restrict.youtube.com
update_ip_address restrictmoderate.youtube.com
update_ip_address strict.bing.com
update_ip_address forcesafesearch.google.com
update_ip_address safe.duckduckgo.com

Output File

The original input file will be changed to this:

/etc/hosts
216.239.38.120  restrict.youtube.com
216.239.38.119  restrictmoderate.youtube.com
204.79.197.220  strict.bing.com
216.239.38.120  forcesafesearch.google.com
52.142.126.100  safe.duckduckgo.com
sed/change/change_lines_in_a_file.txt · Last modified: 2021/01/21 01:27 by peter

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki