2015-01-08 90 views
1

我有我想要一个bash脚本在dnsmasq.conf在.conf文件

默认情况下更换整个线路的情况下更换整个线路,线路有:

listen-address=192.168.42.1 
dhcp-range=192.168.42.1,192.168.42.253,255.255.255.0,192.168.42.255,24h 
dhcp-option=option:router,192.168.42.1 

我实现:

new_ip=$1 
broadcast=$2 
base_ip=`echo $new_ip | cut -d"." -f1-3` 

sed -i 's/^listen-address.*/listen-address=$new_ip/' /etc/dnsmasq.conf 
sed -i 's/^dhcp-range.*/dhcp-range=$base_ip.1,$base_ip.254,255.255.255.0,$broadcast,24h/' /etc/dnsmasq.conf 
sed -i 's/^dhcp-option.*/dhcp-option=option:router,$new_ip/' /etc/dnsmasq.conf 

我打电话的bash作为./test.sh 172.24.239.40 172.24.239.255,我获得以下几行:

listen-address=$new_ip 
dhcp-range=$base_ip.1,$base_ip.254,255.255.255.0,$broadcast,24h 
dhcp-option=option:router,$new_ip 

是否有可能在sed命令行中分离参数与文本?

回答

1

您可以使用:

sed -i.bak -e "s/^listen-address.*/listen-address=$new_ip/" \ 
-e "s/^dhcp-range.*/dhcp-range=$base_ip.1,$base_ip.254,255.255.255.0,$broadcast,24h/" \ 
-e "s/^dhcp-option.*/dhcp-option=option:router,$new_ip/" /etc/dnsmasq.conf 

  • 使用双引号来代替单引号允许变量扩展
  • 使用多个替代命令的单一的sed代替多次拨打sed
  • 使用-i.bak保持原始状态l文件与.bak扩展单引号的
+1

谢谢@anubhava!它工作正常 – ogs

+0

不客气,很高兴它解决了。 – anubhava

1

使用双引号,而不是安全的,当你在sed变量:

sed -i "s/^listen-address.*/listen-address=$new_ip/" /etc/dnsmasq.conf 
sed -i "s/^dhcp-range.*/dhcp-range=$base_ip.1,$base_ip.254,255.255.255.0,$broadcast,24h/" /etc/dnsmasq.conf 
sed -i "s/^dhcp-option.*/dhcp-option=option:router,$new_ip/" /etc/dnsmasq.conf