sed在l命令末尾添加额外字符

sed在l命令末尾添加额外字符,sed,freebsd,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的例子,

我正在尝试用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的例子,但它们看起来都与我正在做的相似,这里出了什么问题?

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

这与GNU
sed
不同,后者不需要
-i
标志的参数。有关完整文档,请参阅。这是对的有用扩展之一,不幸的是,它的实现不一致

现在,
“s/private\u key\u password=.*/private\u key\u 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
,如果可以的话。

您使用哪个操作系统和sed版本?FreeBSD,sed版本我不知道如何获取。