我正在尝试用 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)
完整的文档。这是 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
如果它们是。
关于在 l 命令的末尾添加额外的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35620009/