在l命令结尾处加上额外的字符

时间:2016-02-25 06:32:47

标签: sed freebsd

我正在尝试使用cshell中的sed替换配置文件中的值。

然而它给了我错误:

sed: 1: "/usr/local/etc/raddb/mo ...": extra characters at the end of l command

我正在尝试以下命令:

sed -i "s/private_key_password = .*/private_key_password = test/" /usr/local/etc/raddb/mods-available/eap

我看过sed这样做的例子,但它们看起来和我正在做的一样,这里出了什么问题?

1 个答案:

答案 0 :(得分:6)

FreeBSD sed需要-i之后的参数才能将原始文件重命名为。例如,sed -i .orig 's/../../' file会将原始文件重命名为file.orig,并将修改后的文件保存到file

这与GNU sed不同,后者不需要-i标志的参数。有关完整文档,请参阅sed(1)。这是POSIX spec的有用扩展之一,遗憾的是,它不一致地实现。

现在,"s/private_key_password = .*/private_key_password = test/"部分被解释为-i的参数,/usr/local/etc/raddb/mods-available/eap被解释为命令。因此错误。

所以你想使用:

sed -i .orig "s/private_key_password = .*/private_key_password = test/" /usr/local/etc/raddb/mods-available/eap

然后,您可以使用diff检查更改是否合适,如果是,则删除/usr/local/etc/raddb/mods-available/eap.orig