J'essaie d'écrire le script bash suivant:
HOME_DIR=/opt/my_home
find ./CONFIG -type f -exec sed -i "s/_HOME_DIR_/$_HOME_DIR/g" {} \;
La ligne que je souhaite modifier dans les fichiers est la suivante:
users = "_HOME_DIR_/config/data/_DOMAIN_/users.conf"
Le résultat final doit donc être:
users = "/opt/my_home/config/data/_DOMAIN_/users.conf"
Mais je ne comprends pas ça ... Je suppose que c'est à cause des caractères d'échappement ...
Quelqu'un peut-il nous éclairer?
Merci
command-line
scripts
sed
Felipe Caldas
la source
la source
Réponses:
Dans les cas où la chaîne de remplacement ou la chaîne de modèle contient des barres obliques, vous pouvez utiliser le fait que GNU sed autorise un délimiteur alternatif pour la commande de substitution. Les choix courants pour le délimiteur sont le caractère de canal
|
ou le hachage#
- le meilleur choix de caractère de délimitation dépendra souvent du type de fichier traité. Dans votre cas, vous pouvez essayerNotez également que vous avez mal saisi le nom de votre variable $ HOME_DIR (il ne commence pas par un trait de soulignement).
Juste pour info, vous voudrez peut-être éviter d'utiliser des majuscules pour les variables utilisateur dans votre script - elles doivent être réservées aux variables système. De plus, le
g
changement n'est pas nécessaire, sauf si vous souhaitez effectuer plusieurs remplacements sur une seule ligne.la source
Le codage en dur de la variable «opt / home» fonctionnera comme ceci.
la source