sed завершается с ошибкой «unknown option to s» - PullRequest
126 голосов
/ 20 февраля 2012

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

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 Ответ

291 голосов
/ 20 февраля 2012

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

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

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

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

...