Problème sed

Résolu
nemith -  
zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   -
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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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 


    0
  2. nemith
     
    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
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
      0
    2. nemith
       
      en fouillant et testant dans tous les sens j'ai trouvé :

      sed -i 's#ServerRoot "/etc/httpd"#ServerRoot '${HTTPD}'#' conf.d
      0
      1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > nemith
         
        Merci du retour.
        0