在FreeBSD上使用sed -i

时间:2018-04-20 05:36:13

标签: sed freebsd

我将字符串存储在两个变量中(line是当前行,new是替换)。我的代码如下所示:

sed -i "s@line@new@" output_file

但是,此解决方案不适用于FreeBSD。

有没有办法稍微修改一下这段代码才能起作用?

1 个答案:

答案 0 :(得分:2)

是。使用:

sed -i '' "s@line@new@" output_file

在BSD系统(以及macOS)上,sed命令的-i选项需要一个后缀,后缀可以附加到-i或单独的参数。但是,当后缀为空时,它必须是单独的参数。这与GNU sed不同,其中-i选项采用可选后缀,但如果指定,则必须附加到-i选项。因此,必须使用附加到-i选项的显式非空后缀来编写两者之间可移植的脚本(BSD和GNU)。请注意,此类脚本可能仍然无法移植到其他POSIX系统; -i选项不是标准化的(正如你可以从不同的行为中看出来的那样)。