我正在尝试使用
sed -i -e "s/.*seb.*/ \"$ftp_login_template\"/" $ftp_dir
Run Code Online (Sandbox Code Playgroud)
但是我收到这个错误:
sed: -e expression #1, char 34: unknown option to `s'
Run Code Online (Sandbox Code Playgroud)
我不明白为什么因为这完美地工作:
sed -i -e "s/.*wbspassword.*/ \"wbspassword\": \"$password\",/" $user_conf
Run Code Online (Sandbox Code Playgroud)
关于我做错了什么的任何想法?
这可能是问题吗?
ftp_login_template=\${user}:${password}:24:86::\/var\/lib\/clit.${user}\/downloads:\/bin\/false\"
pru*_*nat 315
问题在于斜杠:你的变量包含它们,最后的命令就像sed "s/string/path/to/something/g"包含太多斜杠一样.
由于sed可以将任何char作为分隔符,因此您可以尝试使用另一个未出现在替换字符串中的字符:
replacement="/my/path"
sed -e "s@pattern@$replacement@"
Run Code Online (Sandbox Code Playgroud)
请注意,这不是防弹:如果替换字符串稍后包含@它将因同样的原因而中断,并且\1仍将根据sed规则解释任何反斜杠序列.