在sed中使用变量,但存在转义问题

在sed中使用变量,但存在转义问题,sed,Sed,我试图使用sed执行内联搜索和替换,但我认为奇怪的字符会导致问题 My config.inc文件包含两行: $GLOBALS['industry_id'] = '1'; yyyy 类似这样的简单方法可以工作,并用zzzz替换yyyy: x="yyyy" y="zzzz" sed -i "s/${x}/${y}/" config.inc 但像这样的事情是行不通的: x="$GLOBALS['industry_id'] = '1';" y="$GLOBALS['industry_id'] = '

我试图使用sed执行内联搜索和替换,但我认为奇怪的字符会导致问题

My config.inc文件包含两行:

$GLOBALS['industry_id'] = '1';
yyyy
类似这样的简单方法可以工作,并用zzzz替换yyyy:

x="yyyy"
y="zzzz"
sed -i "s/${x}/${y}/" config.inc
但像这样的事情是行不通的:

x="$GLOBALS['industry_id'] = '1';"
y="$GLOBALS['industry_id'] = '3';"
sed -i "s/${x}/${y}/g" config.inc
我是否需要转义像$[]”这样的字符;(尽管这也不起作用):

我错过了什么

谢谢 克里斯

更新:由于pfnuesel,以下工作正常:

x="\\\$GLOBALS\\['industry_id'\\] = '1';"
y="$GLOBALS['industry_id'] = '3';"
sed -i "s/${x}/${y}/g" config.inc

“$”在
bash
(参数扩展)中有特殊含义,您需要对其进行转义,即

$ x="\$GLOBALS['industry_id'] = '1';"
现在你有了

$ echo $x
> $GLOBALS['industry_id'] = '1';
但是,如果您尝试使用
sed
命令,它仍然不会工作,因为
$
sed
(行尾)中也有特殊含义。而且
[
]
sed
中有特殊的含义,我们需要避开它们。因为转义字符
\
也有特殊的含义,所以我们也需要转义它

$ x="\\\$GLOBALS\\['industry_id'\\] = '1';"
如果我们现在这样做

$ echo $x
> \$GLOBALS\['industry_id'\] = '1';
i、 e.在特殊字符
$
[
]
之前加一个转义字符


请注意,
y
不需要这样做,因为无论是
$
,还是
[
]
在要替换的字符串中(仅在要替换的字符串中)都没有特殊意义。

我只是尝试了以下操作,但没有成功:
x=\$GLOBALS['industry\u id']='1';'
y=“$GLOBALS['industry\u id']='3';”
sed-i“s/${x}/${y}/g”config.inc
仍然缺少一个转义字符:
y=“\$GLOBALS['industry\u id']='3'”
(因为
$
必须在bash中转义)。
$ echo $x
> \$GLOBALS\['industry_id'\] = '1';