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
相关产品推荐
相关产品推荐

