我想替换/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
但它不会改变。我该怎么做?
你需要做更多的转义:
sed -i "s/$cfg['blowfish_secret'] = '';/$cfg['blowfish_secret'] = 'blablabla';/" /usr/share/phpmyadmin/config.inc.php
由于命令使用双引号以容纳数据中的单引号字符串,因此需要转义两个美元符号,以便 shell 不会将$cfg
解释为变量。
您需要转义左侧的方括号,以便sed
不会将随附的字符串视为括号表达式(要匹配的字符组(。
这可能对你有用(GNU sed(:
sed 's/($cfg['''blowfish_secret'''] = ''')(''';)/1blablabla2/' file
这是一个很好的例子:
- 反向引用和子表达式
- 基本正则表达式语法
- 匹配单引号
对于第三个问题;大多数人(似乎(更喜欢用双引号将整个sed命令括起来。这解决了单引号的问题,但打开了一个副作用,即命令可以被 shell 解释。如果您确定这些副作用不会抬起丑陋的头(变量和 shell 历史记录可以抓住一个(,请继续,而是用单引号将 sed 命令括起来,并且:
- 将单引号替换为
'''
- 在任何文字
[
、]
、*
、^
、$
和之前插入
很可能会挽救这一天。