【问题标题】:sed command to replace php.ini memory_limitsed 命令替换 php.ini memory_limit
【发布时间】:2016-01-19 14:00:21
【问题描述】:

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

我试过了,还是不行

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
  • @FedericoPiazza 你是什么意思?删除一切?那我在跑什么?
  • 我的意思是尝试删除您的空'',并在= 之后更改您的正则表达式。注意我把memory_limit\s*=.*

标签: regex macos bash sed


【解决方案1】:

我稍微修改了你的正则表达式,还删除了你的空单字符串,它对我来说工作正常。

我改变了这个:

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--^^

控制台输出

$ 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

顺便说一句,我的 sed 版本是 sed (GNU sed) 4.2.2

【讨论】:

  • 并且需要注意的是,问题被标记为osx,Mac OS X 上默认提供的sed 是BSD sed,而BSD sed 不表现与 GNU sed 相同。
  • @JonathanLeffler 感谢您的非常有用的评论,没有看到。我稍后会在我的笔记本电脑上查看
【解决方案2】:

即使使用 -E 选项,Mac OS X 上的 BSD sed 也不会将 \s 识别为空格,将 \d 识别为数字:

$ 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 sed。如果您不进行覆盖,那么它将适用于任何符合 POSIX 的sed

【讨论】:

    【解决方案3】:

    此解决方案适用于 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.bak 之前为您保存 php.ini 的副本

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      • 2023-02-09
      • 2010-12-17
      • 2022-01-10
      • 2019-02-11
      • 2018-09-16
      • 1970-01-01
      相关资源
      最近更新 更多