带有-i选项的sed命令在Linux上执行成功,但在MacOS上失败

linux系统上使用sed命令进行文本替换时,我已经成功地使用了以下命令:

sed -i 's/old_string/new_string/g' /path/to/file

然而,当我在Mac OS X上尝试使用相同的命令时,我遇到了以下错误:

command i expects  followed by text

我以为我的Mac运行的是一个标准的BASH shell。问题出在哪里?

在Linux系统上,使用man sed命令查看手册,简介说明sed是一个用于过滤和转换文本的流编辑器。翻到对-i选项的描述部分,会发现该选项用于就地编辑文件(如果提供了后缀,则进行备份)。这意味着参数后缀SUFFIX是可选的,即带或不带这个参数都可以执行。

在MacOS系统上,使用man sed命令查看手册,简介说明sed是一个流编辑器。翻到对-i选项的描述部分,会发现-i选项的工作方式类似于-I,但它会将每个文件与其他文件独立处理。特别是,每个文件中的行号从1开始,“$”地址与当前文件的最后一行匹配,并且地址范围仅限于当前文件。最终结果是,每个文件都由一个单独的sed实例编辑。重要的是,-i后面需要一个必选参数extension,如果不写上扩展名参数就会报错,因此命令执行失败。

带有-i选项的sed命令在Linux上执行成功,但在MacOS上失败

YOO必优科技-AI写作 YOO必优科技-AI写作

智能图文创作平台,让内容创作更简单

YOO必优科技-AI写作 38 查看详情 YOO必优科技-AI写作

为了使同一个命令在两种系统上都能成功执行,可以将命令修改为:

sed -i'' -e 's/old_string/new_string/g' /path/to/file# 或者sed -i'.bak' -e 's/old_string/new_string/g' /path/to/file

这些命令已经在以下系统上进行了测试:

Linux 5.4.0-131-generic #147-UbuntuDarwin Kernel Version 21.6.0

参考资料:

Stack Overflow问题4247068man sed

以上就是带有-i选项的sed命令在Linux上执行成功,但在MacOS上失败的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/811192.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月26日 22:45:01
下一篇 2025年11月26日 22:45:34

相关推荐

发表回复

登录后才能评论
关注微信