我试着用

sed -i -e "s/.*seb.*/    \"$ftp_login_template\"/" $ftp_dir

然而,我得到这个错误:

sed: -e expression #1, char 34: unknown option to `s'

我不明白为什么这样做很完美:

sed -i -e "s/.*wbspassword.*/    \"wbspassword\": \"$password\",/" $user_conf

你知道我哪里做错了吗?

这就是问题所在吗? ftp_login_template = \ $ {user}: ${密码}:24:86::\ / var \ / lib \ /阴蒂。$ {user} \ /下载:\ / bin \ /假\”


问题在于斜杠:你的变量包含了它们,最终的命令将是类似sed "s/string/path/to/something/g"的东西,包含了太多的斜杠。

由于sed可以接受任何字符作为分隔符(无需声明新的分隔符),您可以尝试使用另一个不会出现在替换字符串中的字符:

replacement="/my/path"
sed --expression "s@pattern@$replacement@"

注意,这不是万无一失的:如果替换字符串之后包含@,它将会因为同样的原因而中断,并且任何反斜杠序列,如\1,仍然会根据sed规则进行解释。使用|作为分隔符也是一个不错的选择,因为它的可读性类似于/。