在 l 命令的末尾添加额外的字符

标签 sed freebsd

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

相关文章:

linux - 在 sed 替换中使用 $HOSTNAME

shell - 将包含多个日期记录的 UNIX 文件拆分为每个日期的一个文件

linux - Freebsd vs Mint(ubuntu 衍生品)

c - 在 FreeBSD/bin/and/usr/bin 中返回 vs 退出

regex - 如何在 Linux 上从 id 中提取 uid 值?

bash - 在 bash 上垂直翻转多个字符串

postgresql - 无法加载库/usr/local/lib/postgresql/plpgsql.so .. undefined symbol "MakeExpandedObjectReadOnly"

python - 我还能如何排除此 cron 作业的故障?

java - 如何在 FreeBSD 上为 tomcat 设置 JAVA_OPTS?

java - 从应用程序调用时 SED 命令不生成输出文件