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
Afficher la suite 

2 réponses

Messages postés
37437
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
13 novembre 2019
4212
0
Merci
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 


Commenter la réponse de zipe31
0
Merci
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
zipe31
Messages postés
37437
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
13 novembre 2019
4212 -
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
en fouillant et testant dans tous les sens j'ai trouvé :

sed -i 's#ServerRoot "/etc/httpd"#ServerRoot '${HTTPD}'#' conf.d
zipe31
Messages postés
37437
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
13 novembre 2019
4212 > nemith -
Merci du retour.
Commenter la réponse de nemith