You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS下使用sed向Kernel.php的web配置段插入行失败求助

解决Mac下sed向Kernel.php的web数组插入中间件的问题

问题根源

Mac自带的是BSD版本sed,和Linux常用的GNU sed语法存在差异,你原命令的问题点包括:

  • -i选项在BSD sed中必须明确指定备份后缀,无备份需写-i '',而非直接-i
  • 正则匹配未考虑行首缩进,^'web' => [无法匹配带空格/制表符的目标行
  • 插入行的转义层级冗余,BSD sed不需要多层反斜杠嵌套

正确的sed命令

sed -i '' '/^\s*'\''web'\'' => \[/,/\],/ { /\],/ i\
    \App\Http\Middleware\HandleInertiaRequests::class,
}' app/Http/Kernel.php

关键说明:

  • -i '':BSD sed专属写法,直接修改原文件且不生成备份(如需备份可改为-i.bak,会生成Kernel.php.bak)
  • ^\s*:匹配行首任意空白字符,兼容不同缩进格式的配置行
  • 插入行仅保留一层反斜杠,单引号已避免bash转义干扰

预验证方法

先去掉-i ''参数运行,直接查看输出是否符合预期,确认无误后再修改原文件:

sed '/^\s*'\''web'\'' => \[/,/\],/ { /\],/ i\
    \App\Http\Middleware\HandleInertiaRequests::class,
}' app/Http/Kernel.php

跨平台替代方案(awk)

如果sed仍有兼容问题,awk的跨平台性更好:

awk '/^\s*'\''web'\'' => \[/,/\],/ {
    if ($0 ~ /\],/) {
        print "    \\App\\Http\\Middleware\\HandleInertiaRequests::class,"
    }
    print $0
}' app/Http/Kernel.php > temp.php && mv temp.php app/Http/Kernel.php

逻辑:在web数组的匹配范围内,遇到闭合行],时先打印插入内容,再输出原行,最后用临时文件替换原文件。

内容的提问来源于stack exchange,提问作者Volex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 16:57:31