Как собрать и заменить строку на путь к папке

Я пытаюсь написать следующий скрипт bash:

HOME_DIR=/opt/my_home
find ./CONFIG -type f -exec sed -i "s/_HOME_DIR_/

Я пытаюсь написать следующий скрипт bash:

[110]

Строка, которую я хочу изменить в файлах, выглядит так:

users                   = "_HOME_DIR_/config/data/_DOMAIN_/users.conf"

Таким образом, конечный результат должен be:

users                   = "/opt/my_home/config/data/_DOMAIN_/users.conf"

Но я не понимаю ... Я думаю, это из-за escape-символов ...

Может ли кто-нибудь пролить свет?

Спасибо

HOME_DIR/g" {} \;

Строка, которую я хочу изменить в файлах, выглядит так:

users                   = "_HOME_DIR_/config/data/_DOMAIN_/users.conf"

Таким образом, конечный результат должен be:

users                   = "/opt/my_home/config/data/_DOMAIN_/users.conf"

Но я не понимаю ... Я думаю, это из-за escape-символов ...

Может ли кто-нибудь пролить свет?

Спасибо

14
задан 06.05.2020, 06:39

2 ответа

В тех случаях, когда строка замены или строка шаблона содержат косую черту, вы можете использовать тот факт, что 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 не требуется, если вы не хотите выполнять несколько замен в одной строке.

23
ответ дан 06.05.2020, 06:39

Жесткое кодирование переменной 'opt / home' будет работать следующим образом.

find ./CONFIG -type f -exec sed -i "s/\_HOME\_DIR\_/opt\/home/g" {} \;
0
ответ дан 06.05.2020, 06:40

Теги

Похожие вопросы