Problème sed

Résolu
Bonjour,

j'essaye de remplacer des conf de fichier standart par des conf personalisées en appelant des $Path de conf via une variable en read
# Avant
cat conf.d
ServerRoot "/etc/httpd"

ex de mon script
echo "nom instance"
CONF_INI='ServerRoot "/etc/httpd"'
echo $CONF_INI
read HTTP_INST
HTTPD="/xxxx/xxx/$HTTP_INST"
echo $HTTPD

sed -e 's/${CONF_INI}/${HTTPD}/' conf.d


#Après :
cat conf.d
ServerRoot "/etc/httpd"

CentOS 7.x #/bin/bash

Merci
Configuration: Windows / Chrome 78.0.3904.70

2 réponses

  1. Contributeur
    Salut,
    sed -e 's/${CONF_INI}/${HTTPD}/' conf.d
    Les variables ne sont pas interprétées entre des quotes simples ;-((

    Solution 1 (des quotes doubles) :
    sed -e "s/${CONF_INI}/${HTTPD}/" conf.d

    Solution 2 (il faut sortir des quotes) :
    sed -e 's/'${CONF_INI}'/'${HTTPD}'/' conf.d 


    1. MErci pour ta réponse en effet cela je le savais déjà en fait, mais j'ai toujours la même erreur dans les 2 cas :
      sed: -e expression #1, char 15: unknown option to `s'

      script :
      set -x

      echo "nom instance"
      CONF_INI='ServerRoot\ "/etc/httpd"'
      #CONF_INI=ServerRoot
      echo $CONF_INI
      read HTTP_INST
      HTTPD="/logiciel/apache/$HTTP_INST"
      echo $HTTPD

      #sed -e "s/${CONF_INI}/${HTTPD}/" conf.d
      sed -i 's/'${CONF_INI}'/'${HTTPD}'/' conf.d

      un debug :
      ./test1.sh
      ++ echo 'nom instance'
      nom instance
      ++ CONF_INI='ServerRoot\ "/etc/httpd"'
      ++ echo 'ServerRoot\' '"/etc/httpd"'
      ServerRoot\ "/etc/httpd"
      ++ read HTTP_INST
      toto
      ++ HTTPD=/logiciel/apache/toto
      ++ echo /logiciel/apache/toto
      /logiciel/apache/toto
      ++ sed -i 's/ServerRoot\' '"/etc/httpd"//logiciel/apache/toto/' conf.d
      sed: -e expression #1, char 13: unterminated `s' command
      1. Contributeur
        C'est l'anti-slash qui protège l'espace dans ta variable qui fiche le bronx ;-(

        Essaie comme ça (en protégeant les quotes doubles) :
        CONF_INI="ServerRoot "/etc/httpd""


        Et avec
        sed -i 's/'"${CONF_INI}"'/'"${HTTPD}"'/' conf.d
      2. en fouillant et testant dans tous les sens j'ai trouvé :

        sed -i 's#ServerRoot "/etc/httpd"#ServerRoot '${HTTPD}'#' conf.d