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

为了使同一个命令在两种系统上都能成功执行,可以将命令修改为:
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
这些命令已经在以下系统上进行了测试:
参考资料:
man sed以上就是带有-i选项的sed命令在Linux上执行成功,但在MacOS上失败的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号