Estou tentando escrever o seguinte script bash:
HOME_DIR=/opt/my_home
find ./CONFIG -type f -exec sed -i "s/_HOME_DIR_/$_HOME_DIR/g" {} \;
A linha que desejo alterar nos arquivos é a seguinte:
users = "_HOME_DIR_/config/data/_DOMAIN_/users.conf"
Portanto, o resultado final deve ser:
users = "/opt/my_home/config/data/_DOMAIN_/users.conf"
Mas não estou entendendo isso ... acho que é por causa dos caracteres de escape ...
Alguém pode lançar alguma luz?
obrigado
command-line
scripts
sed
Felipe Caldas
fonte
fonte
Respostas:
Nas circunstâncias em que a cadeia de substituição ou a cadeia de padrão contenha barras, você pode usar o fato de que o GNU sed permite um delimitador alternativo para o comando substitute. As opções comuns para o delimitador são o caractere de pipe
|
ou o hash#
- a melhor opção de caractere de delimitação geralmente depende do tipo de arquivo que está sendo processado. No seu caso, você pode tentarObserve também que você digitou incorretamente o nome da variável $ HOME_DIR (ele não inicia com um sublinhado).
Apenas para evitar que você use all-caps para variáveis de usuário em seu script - elas devem ser reservadas para variáveis do sistema. Além disso, a
g
opção não é necessária, a menos que você queira fazer várias substituições em uma única linha.fonte
A codificação codificada da variável 'opt / home' funcionará assim.
fonte