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