原文链接 https://blog.csdn.net/weiyuefei/article/details/62216107
今天在写一个脚本遇到问题,----需要在sed中引入shell变量,在网上搜了变天才找到,经过测试
这四种方法都可用,在这里跟大家分享下,=---同时谢谢netman大哥,前辈就是前辈哈哈
1.eval sed ’s/$a/$b/’ filename
2.sed "s/$a/$b/" filename
3.sed ’s/’$a’/’$b’/’ filename
4.sed s/$a/$b/ filename
以上内容为引用; 以下部分为个人总结:
问题:如何使用sed命令 查找并替换文件中的路径(目录),替换成某个变量的值?
变量:name="/usr/local"
比如,文件test.txt中, 有一行“nginx=/usr/local/nginx” 那么如何把这一行的内容替换成nginx=$name后,即:nginx=/usr/local
难点一:如何把变量传递给sed?
难点二:如何避免因变量在bash解释器中展开后,出现的“/”和sed替换命令中的“/”冲突问题?
解决方法思路:
针对难点一:通过使用双引号的解决变量展开的问题:sed “s/regexp/replacement/g" filename
针对难点二:通过使用查找替换的特殊字符来避免变量中“/”和sed替换中“/”冲突 sed “s#regexp#replacement#g" filename
所以,可以通过以下命令解决以上难题:
sed -ri “s#(^nginx=).*$#\1${name}#g" /path/to/file