我想在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

当前回答

我在MacOS上也有类似的问题

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

不管用,但是

sed -i"any_symbol" 's/oldword/newword/' file1.txt

工作得很好。

其他回答

您可以通过向-i标志提供要添加到备份文件的后缀来正确使用-i标志。扩展你的例子:

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

将给您两个文件:一个文件名为file1.txt,其中包含替换,另一个文件名为file1.txt。但那是原创的内容。

温和的危险

如果你想要破坏性地覆盖原始文件,可以使用如下方法:

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

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

除了可能毁掉你的原作,我不知道用这种方式欺骗sed会有什么进一步的危险。但是,应该注意的是,如果sed的调用是脚本的一部分,那么Unix Way™(IMHO)将是非破坏性地使用sed,测试它是否干净地退出,然后才删除无关的文件。

我在MacOS上也有类似的问题

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

不管用,但是

sed -i"any_symbol" 's/oldword/newword/' file1.txt

工作得很好。

你可以使用:

sed -i -e 's/<string-to-find>/<string-to-replace>/' <your-file-path>

例子:

sed -i -e 's/Hello/Bye/' file.txt

这在Mac上完美无缺。

sed -i -- "s/https/http/g" file.txt

这将创建备份文件。例如,sed -i -e 's/hello/hello world/' testfile为我创建了一个备份文件testfile-e,在同一个目录下。