在使用sed命令时,出现了“l命令末尾有额外字符”的错误提示。

13

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


你使用的操作系统和sed版本是什么? - Cyrus
FreeBSD,我不知道如何获取sed版本。 - Gerard van den Bosch
1个回答

16

FreeBSD的sed命令在-i后需要加上一个参数以重命名原始文件。例如,sed -i .orig 's/../../' file会将原始文件重命名为file.orig,并将修改后的文件保存为file

这与GNU的sed不同,它不需要-i标志的参数。请参阅完整文档的sed(1)。这是那些有用但可悲地被实现不一致的POSIX规范扩展之一。

当前,“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


4
将空字符串传递给 -i 标记将实现原地编辑,即 -i ''。请参见 https://stackoverflow.com/a/49934903/6548780。 - muthuh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接