我正在编写一个脚本,需要将默认的 php_admin_value[memory_limit] 从 128 M 修改为 512M。当我从 CLI 或 bash 脚本执行命令时,我没有收到任何错误,但实际上都没有将更新应用于文件。我究竟做错了什么?
/etc/php-fpm.d/www.conf 文件中的行是:
;php_admin_value[内存限制] = 128M
这是我的命令:
sudo sed -i 's/;php_admin_value[memory_limit] = 128M/php_admin_value[memory_limit] = 512M/' /etc/php-fpm.d/www.conf
答案1
在 sed 正则表达式中,[
是特殊字符介绍了一个括号表达式。为了将其视为文字字符,必须对其进行转义。为了清楚起见,您也可以省略结束语]
,尽管这并不是绝对必要的。
所以虽然
$ echo ';php_admin_value[memory_limit] = 128M' |
sed 's/;php_admin_value[memory_limit] = 128M/php_admin_value[memory_limit] = 512M/'
;php_admin_value[memory_limit] = 128M
失败,
$ echo ';php_admin_value[memory_limit] = 128M' |
sed 's/;php_admin_value\[memory_limit] = 128M/php_admin_value[memory_limit] = 512M/'
php_admin_value[memory_limit] = 512M
成功了。也可以看看在 sh 脚本中使用 sed 时需要转义哪些字符?