Я пытаюсь использовать
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\"
Ответы:
Проблема с косыми чертами: ваша переменная содержит их, и последняя команда будет выглядеть примерно
sed "s/string/path/to/something/g"
так: слишком много косых черт.Поскольку в
sed
качестве разделителя можно использовать любой символ (без объявления нового разделителя), вы можете попробовать использовать другой символ, который отсутствует в строке замены:Обратите внимание, что это не является пуленепробиваемым доказательством: если строка замены позднее содержит
@
ее, она сломается по той же причине, и любые последовательности с обратной косой чертой, такие как,\1
все равно будут интерпретироваться в соответствии сsed
правилами. Использование|
в качестве разделителя также является хорошим вариантом, так как он похож на удобочитаемость/
.источник
g
)."
не'
иначе вы получите много$content
в вашей конечный результат , а не содержание$content
:))sed -i "s/../../g"
на другой символ ie:,sed -i "s@...@...@g"
тогда проблема множественных наклонных черт должна исчезнуть. А если использовать"
вместо'
него следует также хорошо работает с переменными внутри, а именно:export var1=bar; sed -i "s@foo@${var1}@g"
. Более подробную информацию вы можете найти в удивительном SED документации: grymoire.com/Unix/Sed.htmlinfo sed
(Источник: unix.stackexchange.com/questions/259083/… ): "Синтаксис команды s (как в замене) - 's / regexp / replace / flags'. Символы / могут быть заменены любым другим символом один символ в любой заданной s команде. "