我想替换为/usr/share/phpmyadmin/config.inc.php文件
$cfg['blowfish_secret'] = '';
到
$cfg['blowfish_secret'] = 'blablabla';
带有sed。
我正在尝试:
sed -i "s/\$cfg['blowfish_secret'] = '';/$cfg['blowfish_secret'] = 'blablabla';/g" /usr/share/phpmyadmin/config.inc.php
但是它没有改变。我该怎么办?
答案 0 :(得分:1)
您需要进行更多转义:
sed -i "s/\$cfg\['blowfish_secret'\] = '';/\$cfg['blowfish_secret'] = 'blablabla';/" /usr/share/phpmyadmin/config.inc.php
由于您的命令用双引号引起来以容纳数据中的单引号字符串,因此您将需要转义两个美元符号,以使$cfg
不会被外壳解释为变量。
您需要对左侧的方括号进行转义,以使sed
不会将括号中的字符串视为方括号表达式(要匹配的字符组)。
答案 1 :(得分:1)
这可能对您有用(GNU sed):
sed 's/\(\$cfg\['\''blowfish_secret'\''\] = '\''\)\('\'';\)/\1blablabla\2/' file
这是一个很好的例子:
第三个问题;大多数人(似乎)更喜欢用双引号将整个sed命令括起来。这解决了单引号的问题,但带来了副作用,即该命令可由Shell解释。如果您确定这些副作用不会抬起他们的丑陋的头(变量和shell历史记录可以使它们摆脱困境),请继续使用sed命令,并用单引号引起来:
'\''
代替单引号\
,[
,]
,*
,^
和$
最有可能节省一天。