Я пытаюсь написать следующий скрипт:
HOME_DIR=/opt/my_home
find ./CONFIG -type f -exec sed -i "s/_HOME_DIR_/$_HOME_DIR/g" {} \;
Строка, которую я хочу изменить в файлах:
users = "_HOME_DIR_/config/data/_DOMAIN_/users.conf"
Таким образом, конечный результат должен быть:
users = "/opt/my_home/config/data/_DOMAIN_/users.conf"
Но я этого не понимаю ... Я думаю, это из-за побега символов ...
Кто-нибудь может пролить свет?
Благодарность
command-line
scripts
sed
Фелипе Калдас
источник
источник
Ответы:
В тех случаях, когда строка замены или строка шаблона содержат косую черту, вы можете использовать тот факт, что GNU sed позволяет использовать альтернативный разделитель для команды замены. Распространенным выбором для разделителя является символ канала
|
или хеш-код#
- наилучший выбор символа-разделителя часто зависит от типа обрабатываемого файла. В вашем случае вы можете попробоватьТакже обратите внимание, что вы неправильно набрали имя переменной $ HOME_DIR (оно не начинается с подчеркивания).
Просто, к вашему сведению, вы можете избегать использования всех заглавных букв для пользовательских переменных в вашем скрипте - они должны быть зарезервированы для системных переменных. Кроме того,
g
переключение не требуется, если вы не хотите сделать несколько замен в одной строке.источник
Жесткое кодирование переменной 'opt / home' будет работать следующим образом.
источник