Сбой sed с ошибкой "unknown option to s"

Я пытаюсь использовать

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\"

1 ответ

Решение

Проблема с косыми чертами: ваша переменная содержит их, и последняя команда будет выглядеть примерно так: sed "s/string/path/to/something/g", содержащий слишком много косых черт.

поскольку sed Вы можете использовать любой символ в качестве разделителя, вы можете попробовать использовать другой, который не указан в строке замены:

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

Обратите внимание, что это не является пуленепробиваемым: если строка замены содержит @ это сломается по той же самой причине, и любые последовательности обратной косой черты как \1 будет по-прежнему интерпретироваться в соответствии с правилами sed.

Другие вопросы по тегам