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

sed关于变量替换的问题

时间:2016-02-29 23:28:09      阅读:443      评论:0      收藏:0      [点我收藏+]

标签:表达式   单引号   双引号   资料   

今天说一下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” 博客,转载请与作者联系!

sed关于变量替换的问题

标签:表达式   单引号   双引号   资料   

原文地址:http://dashazi.blog.51cto.com/10354524/1746145

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