Linux 如何将sed与需要转义的变量一起使用

Linux 如何将sed与需要转义的变量一起使用,linux,bash,sed,path,substitution,Linux,Bash,Sed,Path,Substitution,我有一个文件,我正在尝试使用bask用路径替换子字符串的所有内容 我可以使用以下命令: sed -i s/{WORKSPACE}/$MYVARIABLE/g /var/lib/jenkins/jobs/MY-JOB/workspace/config/params.ini 我的config/params.ini如下所示: [folders] folder1 = {WORKSPACE}/subfolder1 folder2 = {WORKSPACE}/subfolder2 但是,当$MYVARI

我有一个文件,我正在尝试使用bask用路径替换子字符串的所有内容

我可以使用以下命令:

sed -i s/{WORKSPACE}/$MYVARIABLE/g /var/lib/jenkins/jobs/MY-JOB/workspace/config/params.ini
我的
config/params.ini
如下所示:

[folders]
folder1 = {WORKSPACE}/subfolder1
folder2 = {WORKSPACE}/subfolder2
但是,当
$MYVARIABLE
是路径时,它会失败(包含斜杠),
sed
命令会失败,原因是:

sed: -e expression #1, char 16: unknown option to `s'

当我手动运行它时,我看到
$MYVARIABLE
需要转义它的路径斜杠。如何修改我的
sed
命令以合并转义版本的
$MYVARIABLE

只需转义
$
符号,并使用不同的分隔符:

sed -i 's;{WORKSPACE};\$MYVARIABLE;g' your_file

没有什么规定您必须使用
/
作为分隔符
sed
将使用(几乎)你粘在里面的任何东西。我倾向于使用
|
,因为它从未(很少)出现在路径中

sridhar@century:~> export boong=FLEAK 
sridhar@century:~> echo $PATH | sed "s|/bin|/$boong|g"
~/FLEAK:/usr/local/FLEAK:/usr/local/sbin:/usr/local/games:/FLEAK:/sbin:/usr/FLEAK:/usr/sbin:/usr/games:/usr/lib/lightdm/lightdm:/home/oracle/app/oracle/product/12.1.0/server_1/FLEAK
sridhar@century:~> 
使用双引号将允许shell进行变量替换