在Mac和Linux系统上都能使用的sed原地编辑标志是什么?


我们知道,Linux 中的 **sed** 命令代表流编辑器,主要用于对文件执行操作,这些操作通常包括搜索单词、替换单词或插入内容等等。这是一个非常有用的命令,可以在 Linux 内核中找到。

还应该注意的是,OS X 附带的 **BSD** (Berkeley Software Distribution) **sed** 需要 **-i** 标志才能工作,而 **GNU** sed则不需要。

使 **GNU** 版本的 **sed** 在 Mac OS X 上运行的一种方法是直接安装 **gnu-sed** 并使用默认名称,这将确保您不必在两个操作系统上运行不同的命令。

为了在 Mac OS X 上安装 **gnu-sed**,您可以考虑以下步骤。

命令

brew install gnu-sed --with-default-names

这将安装 **gnu-sed**,您可以像在其他 Linux 机器上一样使用它。

一个更好的解决方案是使用下面显示的命令,这是一个带有文件扩展名 **.bak** 的原地替换命令,这将帮助您在 Mac OS X 和 GNU 上实现相同的命令。

命令

sed -i.bak ‘s/sample/new_sample’ filename

在上面的命令中,单引号中的字符串意味着我们将文件中特定的单词替换为 **new_sample**。

现在让我们首先在 GNU 上运行上面的命令,看看输出结果。

GNU

$ sed --version | head -1
GNU sed version 4.2.2

$ echo 'sample' > 1.txt

$ sed -i.bak 's/sample/new_sample/' ./1.txt

$ ls
1.txt 1.txt.bak

$ cat ./1.txt
new_sample

Mac OS X

$ sed --version 2>&1 | head -1
sed: illegal option -- -

$ echo 'sample' > 1.txt

$ sed -i.bak 's/sample/new_sample/' ./1.txt

$ ls
1.txt
1.txt.bak

$ cat ./1.txt
new_sample

更新于:2021年7月31日

3K+ 浏览量

开启你的职业生涯

通过完成课程获得认证

开始学习
广告