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

时间:2014-07-02 15:04:07

标签: 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

但是,当$MYVARIABLE是路径时,它失败(包含斜杠),sed命令失败并显示:

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

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

2 个答案:

答案 0 :(得分:1)

没有什么可以说你必须使用/作为分隔符。 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执行变量替换。

答案 1 :(得分:0)

只需转义$符号,然后使用其他分隔符:

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