用于替换php.ini memory_limit的sed命令

时间:2015-10-20 18:53:31

标签: regex macos bash sed

我的php.ini有memory_limit = 128M 我想用sed命令替换它。

我试过这个,它不起作用

sed -i '' 's/memory_limit\s*=\s*\d*M/memory_limit = 1024M/g' ~/Desktop/php.ini 

任何想法为什么? 我将它复制到桌面,以便在实际工作之前不会修改原始的

3 个答案:

答案 0 :(得分:2)

我已经修改了你的正则表达式,也删除了你的空单字符串,它对我来说很好。

我改变了这个:

Doubles

对此:

sed -i '' 's/memory_limit\s*=\s*\d*M/memory_limit = 1024M/g' ~/Desktop/php.ini 

控制台输出

sed -i 's/memory_limit\s*=.*/memory_limit=1024M/g' ~/Desktop/php.ini
       Regex change here--^^

顺便说一下,我的sed版本是$ cat php.ini asdfasd memory_limit = 128M fasd $ sed -i 's/memory_limit\s*=.*/memory_limit=1024M/g' ~/php.ini $ cat php.ini asdfasd memory_limit=1024M fasd

答案 1 :(得分:2)

即使使用sed选项,Mac OS X上的BSD \s也无法将\d视为空格而-E仍为数字:

$ echo 'memory_limit = 128M' | sed -E 's/memory_limit\s*=\s*\d*M/memory_limit = 1024M/g'
memory_limit = 128M
$                         # Oops - output is the same as the input!

我没有设法创建一个由您显示的s///识别的输入字符串,有或没有-E选项(这让我感到惊讶;我尝试了相当多的变化)。但是,您需要的替换可以通过以下方式轻松完成:

$ echo 'memory_limit = 128M' |
> sed 's/memory_limit[[:space:]]*=[[:space:]]*[[:digit:]]*M/memory_limit = 1024M/g'
memory_limit = 1024M
$

修复它以便在没有任何备份的情况下对文件进行就地编辑(我希望你的文件在某种配置管理下!)是我写的和你写的内容的简单组合。

如果您使用-i.bak(创建备份; -i.bak之间没有空格),则该脚本将与GNU sed以及BSD {{ 1}}。如果您不进行覆盖,那么它将适用于任何符合POSIX的sed

答案 2 :(得分:1)

此解决方案适用于OSX

sed -Ei '' 's/(memory_limit = )[0-9]+M/\11024M/g' ~/Desktop/php.ini

i用于就地编辑文件的密钥

扩展E

regex密钥 当没有指定''(备份)

时,

.bak需要提供

s替换模式

()定义一个组

\1群组参考

[0-9]+M - 结尾处M的任何数字

g - 替换所有出现的模式

保存备份文件总是好的:

sed -i .bak -E 's/(memory_limit = )[0-9]+M/\11024M/g' php.ini

这会在替换为php.ini

之前为您保存php.ini.bak的副本