小编典典

在 OS X 上使用 sed 就地编辑

all

我想在 OS X 上使用 sed 编辑文件。我正在使用以下命令:

sed 's/oldword/newword/' file.txt

输出被发送到终端。 file.txt 没有被修改。使用以下命令将更改保存到 file2.txt

sed 's/oldword/newword/' file1.txt > file2.txt

但是我不想要另一个文件。我只想编辑 file1.txt 。我怎样才能做到这一点?

我试过 -i 标志。这会导致以下错误:

sed: 1: "file1.txt": invalid command code f

阅读 78

收藏
2022-06-28

共1个答案

小编典典

您可以-i通过为其提供后缀以添加到备份文件来正确使用该标志。扩展您的示例:

sed -i.bu 's/oldword/newword/' file1.txt

将为您提供两个文件:一个具有file1.txt包含替换的名称,另一个具有file1.txt.bu具有原始内容的名称。

轻度危险

如果您想破坏性地覆盖原始文件,请使用以下内容:

sed -i '' 's/oldword/newword/' file1.txt
      ^ note the space

由于解析行的方式,选项标志和它的参数之间需要一个空格, 因为参数是零长度的。

除了可能破坏您的原件外,我不知道以这种方式欺骗 sed 的任何进一步危险。但是,应该注意的是,如果此调用sed是脚本的一部分,则 Unix
方式(恕我直言)将sed非破坏性地使用,测试它是否干净地退出,然后才删除无关文件。

2022-06-28