我的php.ini有memory_limit = 128M 我想用sed命令替换它。
我试过这个,它不起作用
sed -i '' 's/memory_limit\s*=\s*\d*M/memory_limit = 1024M/g' ~/Desktop/php.ini
任何想法为什么? 我将它复制到桌面,以便在实际工作之前不会修改原始的
答案 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
的副本