今天说一下sed变量替换的问题
这个问题主要还是一个群友提问的
开始我也没有做出来
[email protected]:~/pwb/tmp# echo $a 9 [email protected]:~/pwb/tmp# sed ‘s/1/$a/g‘ ^C [email protected]:~/pwb/tmp# echo 123|sed ‘s/1/$a/g‘ $a23
就像是这样带着变量的替换
后来查了以下资料
有一种比较简单的方法
主要就是平时我们用sed的时候都是用的单引号
这里替换变量就是因为bash并没有转义需要使用双引号
[email protected]:~/pwb/tmp# echo 123|sed "s/1/$a/g" 923 [email protected]:~/pwb/tmp# echo $a 9
还有一种比较极端的情况就是变量里含有/
[email protected]:~/pwb/tmp# echo "123/abc/123" 123/abc/123 [email protected]:~/pwb/tmp# a=3/a [email protected]:~/pwb/tmp# echo $a 3/a [email protected]:~/pwb/tmp# echo "123/abc/123"|sed "s/$a//g" sed:-e 表达式 #1,字符 7:“s”的未知选项
这样的话将$a变量转化完毕、会多出来/
那么这样的话怎么办
最简单的做法就是将sed的分隔符给变了
将 / 改成 #
[email protected]:~/pwb/tmp# echo "123/abc/123"|sed "s#$a##g" 12bc/123 [email protected]:~/pwb/tmp#
这样就可以了
但是根据这个问题一直研究下去的就是
如果一个变量既有/又有#的话那么该怎么办
我表示无能为力哈哈
说白了就是不断改变分割符的问题
就事论事吧
[email protected]:~/pwb/tmp# echo "123/abc/123"|sed "s,$a,,g" 12bc/123 [email protected]:~/pwb/tmp# echo "123/abc/123"|sed "s;$a;;g" 12bc/123
其实sed可以用很多符号做分隔符、但是请不要使用sed的一些正则即可、比如,;都可以
时间: 2024-10-22 23:06:35