替换 .conf 文件中的整行
Replace entire lines in a .conf file
我有一种情况需要 bash 脚本来替换 dnsmasq.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=
broadcast=
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 命令行中将参数与文本分离?
您可以使用:
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
来保证带有 .bak
扩展名的原始文件的安全
当你在 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
我有一种情况需要 bash 脚本来替换 dnsmasq.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=
broadcast=
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 命令行中将参数与文本分离?
您可以使用:
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
来保证带有.bak
扩展名的原始文件的安全
当你在 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