今天说一下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的一些正则即可、比如,;都可以
本文出自 “Dashazi's blog” 博客,转载请与作者联系!
原文地址:http://dashazi.blog.51cto.com/10354524/1746145