Sed: Find and Replace The Whole Line [ Regex ]

by on December 14, 2012 · 1 comment· LAST UPDATED December 14, 2012

in , ,

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

acl verizonfios src 1.2.3.4

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 4.5.6.7

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

Tutorial details
DifficultyEasy (rss)
Root privilegesYes
Requirementssed+ssh
Estimated completion timeN/A

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 4.5.6.7/' file

In this example, replace an IP address with 202.1.2.3:

 
sed -i 's/^acl verizonfios.*/acl verizonfios src 202.1.2.3/' /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 202.1.2.3/' /etc/squid/squid.conf
ssh root@your.server.at.cloud /usr/sbin/squid -k reconfigure
 

Sample shell script

#!/bin/bash
# Author: nixCraft <www.cyberciti.biz> - GPL v2.x+
# -------------------------------------------------
 
## cloud server name ##
_rserver="your.server.at.cloud"
_ruser="root"
 
## 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"
 
TwitterFacebookGoogle+PDF versionFound an error/typo on this page? Help us!

{ 1 comment… read it below or add one }

1 thameera December 14, 2012 at 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.

Reply

Leave a Comment

Tagged as: , , , ,

Previous Faq:

Next Faq: