sed中的转义字符

sed中的转义字符,sed,escaping,Sed,Escaping,我试图用sed替换几个php数据库数组变量的值,但它并没有按预期工作 以下是一个例子: echo \$DB['TYPE']='MYSQL' | sed "s|^$DB['TYPE']=.*$|$DB['TYPE']='POSTGRESQL'|g" 我试图用$DB['TYPE']='POSTGRESQL'替换$DB['TYPE']='MYSQL' 我用这种方式逃过了,但不起作用,我一直得到$DB[TYPE]=MYSQL echo \$DB['TYPE']='MYSQL' | sed "s|^\$

我试图用sed替换几个php数据库数组变量的值,但它并没有按预期工作

以下是一个例子:

echo \$DB['TYPE']='MYSQL' | sed "s|^$DB['TYPE']=.*$|$DB['TYPE']='POSTGRESQL'|g"
我试图用$DB['TYPE']='POSTGRESQL'替换
$DB['TYPE']='MYSQL'

我用这种方式逃过了,但不起作用,我一直得到
$DB[TYPE]=MYSQL

echo \$DB['TYPE']='MYSQL' | sed "s|^\$DB[\'TYPE\']=.*$|\$DB[\'TYPE\']=\'POSTGRESQL\'|g"
提前谢谢

我试图用$DB['TYPE']='POSTGRESQL'替换
$DB['TYPE']='MYSQL'

您可以使用:

sed "s|\(\$DB\['TYPE'\]=\)'MYSQL'|\1'POSTGRESQL'|g" file

尽可能减少重复:

$ echo "\$DB['TYPE']='MYSQL'" |
  sed  "s|^\(\$DB\['TYPE'\]='\)[^']*|\1POSTGRES|"
$DB['TYPE']='POSTGRES'
您使用线锚,因此
g
修饰符是无用的——模式每行最多可以匹配一次

echo
行上需要双引号。如果没有它们,shell会将单引号视为引号字符,而不是文字字符:

$ echo \$DB['TYPE']='MYSQL' 
$DB[TYPE]=MYSQL
在你的例子中,sed找不到确切的短语。你为什么不交换你想交换的单词呢

echo \$DB['TYPE']='MYSQL' | sed "s|MYSQL|POSTGRESQL|g"

我最终还是选择了这个

echo "\$DB['TYPE']='MYSQL'" | sed "s|^\$DB\['TYPE'\]=.*$|\$DB\['TYPE'\]='POSTGRESQL'|"

它可以正常工作。谢谢各位。

我试过了,但它仍然给我$DB['TYPE']='MYSQL'作为bash中的输出。别忘了,
[…]
是regex括号表达式。需要转义以匹配文本括号。问题似乎是括号,我试图转义括号[],但仍然不起作用。