linux - 带有 -i 选项的 sed 命令在 Mac 上失败,但在 Linux 上有效

我已成功使用以下 sed 命令在 Linux 中搜索/替换文本:

sed -i 's/old_link/new_link/g' *

但是,当我在我的 Mac OS X 上尝试它时,我得到:

"command c expects \ followed by text"

我以为我的 Mac 运行的是普通的 BASH shell。怎么了?

编辑:

根据@High Performance,这是由于 Mac sed 具有不同的 (BSD) 风格,因此我的问题是如何在 BSD sed

编辑:

这是一个导致此问题的实际示例:

sed -i 's/hello/gbye/g' *

最佳答案

如果您使用 -i 选项,则需要为备份提供扩展名。

如果你有:

File1.txt
File2.cfg

该命令(注意 -i''-e 之间缺少空格,以使其适用于新版本的Mac 和 GNU):

sed -i'.original' -e 's/old_link/new_link/g' *

创建 2 个备份文件,例如:

File1.txt.original
File2.cfg.original

没有可移植的方法来避免制作备份文件,因为不可能找到适用于所有情况的混合 sed 命令:

  • sed -i -e ... - 在 OS X 上不起作用,因为它会创建 -e 备份
  • sed -i'' -e ... - 不适用于 OS X 10.6,但适用于 10.9+
  • sed -i '' -e ... - 不适用于 GNU

注意鉴于并非所有平台都可以使用 sed 命令,您可以尝试使用其他命令来达到相同的效果。

例如,perl -i -pe's/old_link/new_link/g' *

https://stackoverflow.com/questions/4247068/

相关文章:

regex - 如何在 find 命令中使用正则表达式?

linux - 在亚马逊云服务器上设置 FTP

python - 如何更新 Python 包?

python - 将 timedelta 转换为天、小时和分钟

python - 如何在管道中使用 `subprocess` 命令

linux - 如何在 Linux 中生成带有绝对路径的文件列表?

python - NumPy 中的 ndarray 和数组有什么区别?

python - 在 Python 中计算字典中不同键的数量

windows - Windows、Mac OS X 和 Linux 是用什么语言编写的?

linux - 如何使用 bash 命令创建 CPU 峰值