bash 使用多个转义字符更改字符串

bash 使用多个转义字符更改字符串

您好,我尝试自动化,例如更改 php 文件中的一个变量。

root /tmp # cat defaults.inc.php|egrep "reply_all_mode"
$config['reply_all_mode'] = 0;

我尝试首先通过类似这样的 grep 来捕获此问题:

root /tmp # cat defaults.inc.php|grep '$config['reply_all_mode'] = 0;'

但我没有检索到任何结果...

我尝试使用 sed 或 perl 来$config['reply_all_mode'] = 0;完成更改。$config['reply_all_mode'] = 1 ;

如何用这种字符做到这一点?

答案1

所有这些字符对于正则表达式来说都是特殊的:$,,[]
需要转义。

我会写

sed 's/\(\$config\['\''reply_all_mode'\''\] = \)0;/\11;/' file

最多用=括号括起来,\1替换部分中的 复制该文本。然后0;替换为1;

混乱'\''是因为 shell 的单引号字符串不能包含单引号字符串。我们必须跳出单引号字符串来添加文字单引号。我们不必使用单引号,但在我看来,这样更糟糕:

sed "s/\\(\\\$config\\['reply_all_mode'\\] = \\)0;/\\11;/" file

使用 perl 进行整理

perl -pe 's/\$config\['\'reply_all_mode'\''\] = \K0;/1;/' file

相关内容