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