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

无参数-i可用:是GNU sed --posix有BUG还是BSD sed不符合POSIX?

关于sed -i 选项兼容性疑问的解答

你提到的两种可能性均不成立,核心原因是POSIX 标准从未定义过 sed 的 -i 选项,-i 本身就是各实现方自行添加的扩展功能,不在POSIX的约束范围内。

具体说明

  • GNU sed 的 --posix 选项的设计逻辑是「禁用GNU对POSIX已有规定功能的扩展修改」,并不会移除POSIX完全没有定义的额外功能选项,因此 --posix 模式下依然支持无参数的 -i 用法是符合设计预期的,不属于BUG。
  • BSD sed 要求 -i 必须跟随备份后缀参数,不需要备份时需显式传入空字符串(即 -i ''),这是BSD实现的自定义设计,也不违反POSIX规范,因为POSIX根本没有对 -i 选项的用法做任何约定。

跨平台兼容建议

如果需要编写同时兼容GNU sed和BSD sed的脚本,可以统一使用带备份后缀的写法:

sed -i.bak -n '1,25p' *.txt && rm *.txt.bak

这种写法在两个平台都可以正常运行,执行后会自动删除生成的备份文件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:09:05