В тех случаях, когда строка замены или строка шаблона содержат косую черту, вы можете использовать тот факт, что GNU sed позволяет использовать альтернативный разделитель для команды замены. Распространенным выбором для разделителя является символ канала |
или хеш-код #
- наилучший выбор символа-разделителя часто зависит от типа обрабатываемого файла. В вашем случае вы можете попробовать
sed -i "s#_HOME_DIR_#$HOME_DIR#"
Также обратите внимание, что вы неправильно набрали имя переменной $ HOME_DIR (оно не начинается с подчеркивания).
$ HOME_DIR=/opt/my_home
$ echo "_HOME_DIR_/config/data/_DOMAIN_/users.conf" | sed "s#_HOME_DIR_#$HOME_DIR#"
/opt/my_home/config/data/_DOMAIN_/users.conf
Просто, к вашему сведению, вы можете избегать использования всех заглавных букв для пользовательских переменных в вашем скрипте - они должны быть зарезервированы для системных переменных. Кроме того, g
переключение не требуется, если вы не хотите сделать несколько замен в одной строке.