码迷,mamicode.com
首页 > 其他好文 > 详细

如何使用sed在文件中确定行插入带有变量的字符串

时间:2019-07-30 23:17:59      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:strong   方法   iptables   今天   http   new   端口   变量   html   

背景

最近在研究一键部署,其中有一个环节,是要使用shell脚本放开防火墙的某个端口号

方法

使用shell中常见的插入文本命令:sed

问题

如果已经预知要打开的端口号如6379,可以使用:sed -i ‘10a\-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT‘ /etc/sysconfig/iptables 来实现

但是目前的端口号为未知变量$port,如果使用:sed -i ‘10a\-A INPUT -m state --state NEW -m tcp -p tcp --dport $port -j ACCEPT‘ /etc/sysconfig/iptables的植方式来写入,在iptables中仍然显示的是变量名,而不是变量名的值

这是一个大坑大坑

技术图片

 

找了很长时间的解决方法,比如加"",加\。。。。,都没有用

终于在今天,一举突破,感谢给我提供思路和解决方案的陌生人,喝水不忘挖井人:http://www.capjsj.cn/sed_variable.html

解决方式为:sed -i ‘10i-A INPUT -m state --state NEW -m tcp -p tcp --dport ‘$port‘ -j ACCEPT‘ /etc/sysconfig/iptables

授人以鱼不如授人以渔,产生问题的原因是:

因为 $port 是shell变量而不是sed中的变量,需要单独拿到 sed 的单引号外面来才能被 shell 解析。单引号里面是 sed 的势力范围,shell 无法触及。

sed的参数后的命令,是以单引号开始,单引号结束的,所以想将shell变量拿出来,那就在变量前面加个单引号让sed命令结束,再在变量后面再加个单引号让sed命令再开始

如何使用sed在文件中确定行插入带有变量的字符串

标签:strong   方法   iptables   今天   http   new   端口   变量   html   

原文地址:https://www.cnblogs.com/jasmine095/p/11273374.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!