Вам лучше использовать инструмент, который понимает переменные - Perl, может быть, AWK - пытаясь заключить в кавычки случайную строку, чтобы избежать всех непреднамеренных взаимодействий с синтаксическим анализом команды sed, что вызывает проблемы.
Такжевы не получите интерполяцию вашей переменной при использовании одинарных кавычек, и даже при -r
sed не использует синтаксис Perl для регулярных выражений - -r
возвращает вас только к версии egrep
регулярных выражений, поэтому \s
не делаетделайте то, что вы хотите.
В любом случае, игнорируя мой собственный совет, вот как мы делали это в старые времена, когда у нас не было этих лучших инструментов:
read -p "Input Variable?" newVar
sed "/^ *myvar=/c\\
myvar=`echo \"$newVar\" | sed 's/\\\\/\\\\\\\\/'`" ./config.properties
Если вы неНе думайте, что ваши пользователи поймут, как вводить буквальную обратную косую черту по вашему запросу, вы можете упростить это до:
read -p "Input Variable?" newVar
sed "/^ *myvar=/c\\
myvar=$newVar" ./config.properties