我们有一个文件jimo:
$ cat jimo
hehe haha jimo wiki wiki
注意:以下替换不使用-i参数真的替换文件内容,仅仅展示替换后的结果
sed普通替换
我们替换一个文件中的某个字符串,比如替换jimo里的wiki为haha:
$ sed 's/wiki/haha/g' jimo
hehe haha jimo haha haha
但是当我们用变量时如何替换呢?
带有变量的替换
声明一个变量 v1
$ v1=lily
$ echo $v1
lily
接着我们替换,这时候需要使用双引号,才能解析变量
$ sed "s/wiki/$v1/g" jimo
hehe haha jimo lily lily
一切看起来很美好,不过现在我们有一个变量2:
$ v2=/tmp/txt
$ echo $v2
/tmp/txt
再次替换时发现报错了
$ sed "s/wiki/$v2/g" jimo
sed: -e expression #1, char 9: unknown option to `s'
为什么呢?
其实很简单,带入变量,sed命令变成了 sed "s/wiki/tmp/txt/g" jimo
, 这个命令是不合法的。
那么解决方案是什么?
自定义分隔符:
$ sed "s|wiki|$v2|g" jimo
hehe haha jimo /tmp/txt /tmp/txt