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

当前回答

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

其他回答

-i标志可能不适合您,因为您使用的是GNU sed的示例,而macOS使用的是BSD sed,它们的语法略有不同。

所有其他答案都告诉您如何纠正语法以使用BSD sed。另一种选择是在你的macOS上安装GNU sed:

brew install gsed

然后使用它来代替macOS附带的sed版本(注意g前缀),例如:

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

如果你想要GNU sed命令总是可以移植到macOS,你可以在你的路径前加上“gnubin”目录,通过在你的.bashrc/中添加这样的东西。ZSHRC文件(运行brew info gsed看看你到底需要做什么):

export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"

从那时起,GNU sed就变成了默认sed,你可以简单地运行:

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

我在MacOS上也有类似的问题

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

不管用,但是

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

工作得很好。

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

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

你可以使用:

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

例子:

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

这在Mac上完美无缺。