在 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
。
我正在尝试用 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
。