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

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

然而,当我在Mac OS X上try 时,我得到:

"命令c需要\后跟文本"

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

EDIT:

根据@High Performance,这是因为Mac sed具有不同的(BSD)风格,因此我的问题是如何在BSD sed中复制此命令?

EDIT:

下面是一个导致这种情况的实际例子:

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上工作

Note考虑到没有一个sed命令可以在所有平台上运行,您可以try 使用另一个命令来实现相同的结果.

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

Linux相关问答推荐

如何更正我的CMakeLists.txt,使我的项目同时构建在Linux和Windows上?

运行系统命令失败,但相同的命令可以直接在 bash 中执行

如何更改文件的上次访问/修改/更改日期?

在服务器目录之外启动 DolphinDB 服务器时出错

查看 linux 上的多核或多 CPU 利用率

我需要 -D_REENTRANT 和 -pthreads 吗?

在 64 位 Linux 操作系统上编译 32 位程序导致致命错误

如何在 Linux 中使用命令行将 PDF 转换为 JPG?

如何在没有 IDE 的情况下构建和部署三星 SmartTV 应用程序(例如:在 Linux 上)

我可以在 Ubuntu 上使用 Homebrew 吗?

如何在 Linux 中通过控制台输出启动 Tomcat?

何时使用管道与何时使用共享内存

在 Python 中删除 Root 权限

如何运行我所有的 PHPUnit 测试?

如何自动化 HTML 到 PDF 的转换?

如何在 linux 或 unix 上找到用户的主目录?

基于shell中正则表达式的 colored颜色 突出显示输出

conda 命令会提示错误:Bad Interpreter: No such file or directory

PostgreSQL psql 终端命令

在linux中将制表符分隔的文件转换为csv的最快方法