在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,如果不写上扩展名参数就会报错,因此命令执行失败。

YOO必优科技-AI写作
智能图文创作平台,让内容创作更简单
38 查看详情
为了使同一个命令在两种系统上都能成功执行,可以将命令修改为:
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
微信扫一扫
支付宝扫一扫