Sed:查找并替换整个行[Regex]

时间:2020-01-09 10:46:07  来源:igfitidea点击:

我的服务器托管在云中:
我在squid.conf文件中有以下一行。

acl verizonfios src 1.2.3.4

我的ISP会每两周强制更改IP地址。
如何用一个新的IP替换它们

acl verizonfios src 4.5.6.7

如何使用sed和ssh将以acl verizonfios开头的行替换为新的IP地址?

sed语法如下,以匹配以acl verizonfios开头的行并替换整行:

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

在此示例中,将IP地址替换为192.1.2.3:

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

您可以使用ssh执行sed命令:

ssh [email protected] sed -i 's/^acl verizonfios.*/acl verizonfios src 192.1.2.3/' /etc/squid/squid.conf
ssh [email protected] /usr/sbin/squid -k reconfigure

示例脚本

#!/bin/bash
# Author: theitroad <www.theitroad.local> - 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"