首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换.conf文件中的整行

替换.conf文件中的整行
EN

Stack Overflow用户
提问于 2015-01-08 14:54:10
回答 2查看 131关注 0票数 1

我需要一个bash脚本来替换dnsmasq.conf中的整行

默认情况下,行如下:

代码语言:javascript
复制
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

我执行:

代码语言:javascript
复制
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,并获得以下行:

代码语言:javascript
复制
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命令行中的文本分离?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-08 14:56:43

您可以使用:

代码语言:javascript
复制
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扩展名
票数 1
EN

Stack Overflow用户

发布于 2015-01-08 14:57:24

在sed中有变量时,使用双引号而不是单引号:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27842943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档