在 l 命令末尾 sed 额外字符

sed extra characters at end of l command

我正在尝试用 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 's/../../' file 会将原始文件重命名为 file.orig,并将修改后的文件保存为 file.

这与 GNU sed 不同,它不需要 -i 标志的参数。请参阅 sed(1) for the full documentation. This is one of those useful extensions to the 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