在sed中使用变量,但存在转义问题
我试图使用sed执行内联搜索和替换,但我认为奇怪的字符会导致问题 My config.inc文件包含两行:在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'] = '
$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';