今天说一下sed变量替换的问题
这个问题主要还是一个群友提问的
开始我也没有做出来

root@lp:~/pwb/tmp# echo $a
9
root@lp:~/pwb/tmp# sed 's/1/$a/g'
^C
root@lp:~/pwb/tmp# echo 123|sed 's/1/$a/g'
$a23

就像是这样带着变量的替换
后来查了以下资料
有一种比较简单的方法
主要就是平时我们用sed的时候都是用的单引号
这里替换变量就是因为bash并没有转义需要使用双引号

root@lp:~/pwb/tmp# echo 123|sed "s/1/$a/g"
923
root@lp:~/pwb/tmp# echo $a
9

还有一种比较极端的情况就是变量里含有/

root@lp:~/pwb/tmp# echo "123/abc/123"
123/abc/123
root@lp:~/pwb/tmp# a=3/a
root@lp:~/pwb/tmp# echo $a
3/a
root@lp:~/pwb/tmp# echo "123/abc/123"|sed "s/$a//g"
sed:-e 表达式 #1,字符 7:“s”的未知选项

这样的话将$a变量转化完毕、会多出来/
那么这样的话怎么办
最简单的做法就是将sed的分隔符给变了
将 / 改成 #

root@lp:~/pwb/tmp# echo "123/abc/123"|sed "s#$a##g"
12bc/123
root@lp:~/pwb/tmp#

这样就可以了
但是根据这个问题一直研究下去的就是
如果一个变量既有/又有#的话那么该怎么办
我表示无能为力哈哈
说白了就是不断改变分割符的问题
就事论事吧

root@lp:~/pwb/tmp# echo "123/abc/123"|sed "s,$a,,g"
12bc/123
root@lp:~/pwb/tmp# echo "123/abc/123"|sed "s;$a;;g"
12bc/123

其实sed可以用很多符号做分隔符、但是请不要使用sed的一些正则即可、比如,;都可以