我试图用sed替换几个php数据库数组变量的值,但它没有按预期工作
以下是一个例子:
echo \$DB['TYPE']='MYSQL' | sed "s|^$DB['TYPE']=.*$|$DB['TYPE']='POSTGRESQL'|g"
我正在尝试替换$DB['TYPE']='MYSQL' with $DB['TYPE']='POSTGRESQL'
我以这种方式逃脱了但不起作用,我不断获得$DB[TYPE]=MYSQL
echo \$DB['TYPE']='MYSQL' | sed "s|^\$DB[\'TYPE\']=.*$|\$DB[\'TYPE\']=\'POSTGRESQL\'|g"
提前致谢
答案 0 :(得分:0)
我正在尝试替换
$DB['TYPE']='MYSQL' with $DB['TYPE']='POSTGRESQL'
您可以使用:
sed "s|\(\$DB\['TYPE'\]=\)'MYSQL'|\1'POSTGRESQL'|g" file
答案 1 :(得分:0)
尽可能减少重复:
$ echo "\$DB['TYPE']='MYSQL'" |
sed "s|^\(\$DB\['TYPE'\]='\)[^']*|\1POSTGRES|"
$DB['TYPE']='POSTGRES'
您使用线锚,因此g
修饰符无效 - 每个模式最多可匹配一次。
echo
行需要双引号。如果没有它们,您将获得shell将单引号视为引号字符,而不是文字字符:
$ echo \$DB['TYPE']='MYSQL'
$DB[TYPE]=MYSQL
答案 2 :(得分:0)
在你的例子中,sed找不到确切的短语。你为什么不直接交换想要交换的词呢
echo \$DB['TYPE']='MYSQL' | sed "s|MYSQL|POSTGRESQL|g"
答案 3 :(得分:0)
我最终选择了这个
echo "\$DB['TYPE']='MYSQL'" | sed "s|^\$DB\['TYPE'\]=.*$|\$DB\['TYPE'\]='POSTGRESQL'|"
它按预期工作。谢谢你们。