我想在 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
您可以-i通过为其提供后缀以添加到备份文件来正确使用该标志。扩展您的示例:
-i
sed -i.bu 's/oldword/newword/' file1.txt
将为您提供两个文件:一个具有file1.txt包含替换的名称,另一个具有file1.txt.bu具有原始内容的名称。
file1.txt
file1.txt.bu
轻度危险
如果您想破坏性地覆盖原始文件,请使用以下内容:
sed -i '' 's/oldword/newword/' file1.txt ^ note the space
由于解析行的方式,选项标志和它的参数之间需要一个空格, 因为参数是零长度的。
除了可能破坏您的原件外,我不知道以这种方式欺骗 sed 的任何进一步危险。但是,应该注意的是,如果此调用sed是脚本的一部分,则 Unix 方式(恕我直言)将sed非破坏性地使用,测试它是否干净地退出,然后才删除无关文件。
sed