我正在尝试使用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这样做的例子,但它们看起来和我正在做的一样,这里出了什么问题?
答案 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
。