小编典典

sed 失败,出现“'s' 的未知选项”错误

all

我正在尝试使用

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}:${password}:24:86::\/var\/lib\/clit.${user}\/downloads:\/bin\/false\"


阅读 93

收藏
2022-06-21

共1个答案

小编典典

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

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

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

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

2022-06-21