Учитывая, что у вас есть:
line="Some Text that should be changed \\"
так что ваш echo "$line"
дает:
Some Text that should be changed \
Тогда sed
видит:
sed -i "s/Some Text that should be changed \/Your replacement/" yourfile
и обратная косая черта означает, что ваш шаблон поиска не закончился, и поэтому команда замены заменена неправильно - как говорится в сообщении об ошибке.
Вам понадобится второй обратный слеш в конце строки. Один из бесчисленных способов сделать это:
case "$line" in
(*\\) line="$line\\";;
esac
Это просто изобретательство ... но оно имеет преимущество в том, что не выполняет никаких внешних команд для исправления строки. В bash
.
также доступны более прямые замены.
Теперь вы можете сделать:
sed -i "s/^$line$/$newline/" $myFile
и до тех пор, пока $newline
не содержит ни косых черт, ни обратной косой черты, вы будете в безопасности.