使用sed正则表达式替换php配置中post_max_size的任意值
解决GNU sed修改php.ini中post_max_size的正则替换问题
针对你的场景,以下是两种适配不同情况的GNU sed正则替换命令,可直接修改/usr/local/etc/php/php.ini中的post_max_size配置:
1. 仅修改已生效(未注释)的配置行
这个命令会匹配所有未被;注释的post_max_size行,保留原有的缩进格式,将任意数字+M的数值替换为128M:
sed -i 's/^\([[:space:]]*\)post_max_size[[:space:]]*=[[:space:]]*[0-9]*M/\1post_max_size = 128M/' /usr/local/etc/php/php.ini
正则解析:
^匹配行开头\([[:space:]]*\)捕获行首的任意空白字符(空格/制表符),替换时用\1保留原缩进post_max_size精确匹配配置项名称[[:space:]]*=[[:space:]]*匹配等号前后任意数量的空白[0-9]*M匹配任意数字结尾加M的数值
2. 同时处理注释/未注释的配置行
如果需要自动去掉注释(若存在)并修改数值,使用这个命令:
sed -i 's/^\([[:space:]]*\);\?[[:space:]]*post_max_size[[:space:]]*=[[:space:]]*[0-9]*M/\1post_max_size = 128M/' /usr/local/etc/php/php.ini
额外正则解析:
;\?匹配0个或1个分号,兼容已注释和未注释的行,替换时自动移除注释符号
备份文件注意事项
如果需要在修改前自动备份原文件,给-i参数加上后缀,比如:
sed -i.bak 's/^\([[:space:]]*\)post_max_size[[:space:]]*=[[:space:]]*[0-9]*M/\1post_max_size = 128M/' /usr/local/etc/php/php.ini
执行后会生成php.ini.bak备份文件,避免误修改导致的问题。
内容的提问来源于stack exchange,提问作者DevWL
相关产品推荐
相关产品推荐

