≡ Menu

Sed: Find and Replace The Whole Line [ Regex ]

I have a line as follows in squid.conf file. My sever is hosted in a cloud:

acl verizonfios src

My ISP will force an IP address change every week or two. I would like to replace them with a new IP

acl verizonfios src

How do I replace the line starting with "acl verizonfios" with new IP address using sed and ssh?

The sed syntax is as follows to match the line starting with "acl verizonfios" and replace the whole line:

sed -i 's/find/replace/' file
sed -i 's/^acl verizonfios.*/acl verizonfios src' file

In this example, replace an IP address with

sed -i 's/^acl verizonfios.*/acl verizonfios src' /etc/squid/squid.conf

You can execute the sed command using ssh:

ssh root@your.server.at.cloud sed -i 's/^acl verizonfios.*/acl verizonfios src' /etc/squid/squid.conf
ssh root@your.server.at.cloud /usr/sbin/squid -k reconfigure

Sample shell script

# Author: nixCraft <www.cyberciti.biz> - GPL v2.x+
# -------------------------------------------------
## cloud server name ##
## Get your public IP ##
_myip="$(/bin/curl ifconfig.me)"
_cmd1="/bin/sed -i 's/^acl verizonfios.*/acl verizonfios src ${_myip}/' /etc/squid/squid.conf"
_cmd2="/usr/sbin/squid -k reconfigure"
## connect to the remote box 
## update the proxy server 
## reload the proxy server
/bin/ssh ${_ruser}@${_rserver} "$_cmd1"
/bin/ssh ${_ruser}@${_rserver} "$_cmd2"

{ 2 comments… add one }

  • thameera December 14, 2012, 4:45 pm

    All this time I was going to vi and doing :s/find/replace/g there. sed -i seems to be much easier.

  • goj September 11, 2015, 11:45 pm

    I wanted to change the name of my raspberrypi hostname in a conf file, but the above example did not work for me (it inserted the new name at the beginning, but left the old name, too)

    Here is the command I ended up using:

    sed -i “/^host =/c\host = myrpi” inputs_test.conf

    this changed:

    host = raspberrypi


    host = myrpi

Leave a Comment

   Tagged with: , , , ,