首页 > 其他 > 详细

sed关于变量替换的问题

时间:2016-02-29 23:25:20      阅读:655      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!