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

批量修改patch_data.conf时sed命令报错的解决方法咨询

这个错误我太熟悉了!问题出在两个关键地方:sed的分隔符冲突,还有变量没有正确展开。

问题根源拆解

  1. 分隔符冲突:你用了sed默认的/作为替换命令的分隔符,但你的stringreplace和stringnew里全是路径中的/。sed会把第一个/当成匹配部分的结束标记,后面的/就会被误判为无效的命令选项,直接触发unknown option to 's'错误。
  2. 变量未展开:你用单引号包裹了sed的表达式,bash在单引号环境下不会解析变量,所以sed其实是在尝试匹配字面量$stringreplace,而不是你定义的那个实际字符串——这不仅找不到目标内容,还会和分隔符问题叠加报错。

修复后的脚本

只需要改两处就能解决问题,完整脚本如下:

#!/bin/bash
Directory=~/MIUI_developer
stringreplace="include \"/home/miui-tool/Patches_jbart/MIUI_9/patches/Weather/Weather.ptch\";"
stringnew="#include \"/home/miui-tool/Patches_jbart/MIUI_9/patches/Weather/Weather.ptch\";"
sudo find "$Directory" -type f -name "patch_data.conf" -exec sed -i "s#$stringreplace#$stringnew#g" {} \;

修复细节说明

  • 更换分隔符:把sed替换命令的分隔符从/换成了#,这样路径里的/就不会被误判成分隔符了。如果你的字符串里碰巧包含#,可以换成@或|这类不会出现在内容里的字符。
  • 用双引号包裹表达式:让bash先把$stringreplace和$stringnew替换成实际的字符串,再传给sed执行。
  • 给路径变量加双引号:给$Directory套上双引号,万一以后路径里出现空格也不会出问题,算是个好习惯。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:09:57