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

FreeBSD下sed -i变量替换字符串失效,如何修改代码?

解决FreeBSD下sed原地替换失效的问题

这问题我碰到过好多次了——BSD系的sed和咱们常用的GNU sed(比如Linux上的)在-i选项的处理上有个关键区别!

你原来的命令在GNU sed里没问题,但FreeBSD的sed要求-i后面必须指定备份文件的后缀:

  • 如果不需要保留原文件的备份,你得给-i加个空字符串参数'';
  • 同时还要注意,你直接写line和new变量是不会被shell解析替换的,得用${line}和${new}让shell把变量值代入进去。

修改后的命令应该是这样:

sed -i '' "s@${line}@${new}@" output_file

额外说明:

  1. 如果想保留原文件的备份(比如存成output_file.bak),只需要把空字符串换成备份后缀:
    sed -i .bak "s@${line}@${new}@" output_file
    
    执行后原文件会变成output_file.bak,修改后的内容写入output_file。
  2. 要是你的line或者new变量里包含了@符号(因为咱们用@做sed替换的分隔符),记得要转义这个符号,或者换个其他分隔符(比如#或者|),避免sed把它当成分隔符解析出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:13:33