我已将字符串存储在两个变量中(行是当前行,新行是替换行)。我的代码如下所示:
sed -i "s@line@new@" output_file
Run Code Online (Sandbox Code Playgroud)
然而,这个解决方案不适用于 FreeBSD。
有什么方法可以稍微修改一下这段代码,使其可以工作吗?
是的。使用:
sed -i '' "s@line@new@" output_file
Run Code Online (Sandbox Code Playgroud)
在 BSD 系统(以及 macOS)上,sed命令的-i选项需要后缀,该后缀可以附加到-i或单独的参数。但是,当后缀为空时,它必须是一个单独的参数。这与 GNU 不同sed,其中-i选项采用可选后缀,但如果指定,则必须将其附加到-i选项上。因此,在两者(BSD 和 GNU)之间移植的脚本必须在选项上附加一个显式的非空后缀-i。请注意,此类脚本可能仍然无法移植到其他 POSIX 系统;该-i选项不是标准化的(正如您可以从不同的行为中看出的)。