Bonjour,
je souhaite remplacer une valeur dans un FICHIER, cette valeur c’est : TARGETDIR=« /home/ »
J’ai créé un script pour une utilisation future et je me heurte à un problème, voilà le script :
#!/bin/bash
rep_candidat=$(echo "/tmp/test")
remplacement1=$(echo 'TARGETDIR="'$rep_candidat'"')
remplacement2=$(echo "'s/TARGETDIR=\"/home"/$remplacement1"\/\')
echo $remplacement1 echo $remplacement2 ### ...pour vérifier
sed -i "$remplacement2" FICHIER
Et j’obtiens le message d’erreur suivant :
sed: -e expression n°1, caractère 1: commande inconnue: « ’ »
J’ai tenté des tonnes de solutions, je n’y arrive pas…
Plusieurs problèmes :
- des commandes echo tout à fait inutiles;
- des variables susceptibles de contenir des caractères ayant un sens particulier pour le shell (on mets des " " ) et des / qui risquent de perturber sed si on l’utilise comme séparateur : on remplace par # ;
- mettre toute la chaîne de substitution dans une seule variable risque de poser des problèmes d’expansion ou de substitution insurmontables : on passe les deux variables.
Un truc comme ceci devrait fonctionner :
#!/bin/bash
rep_candidat=/tmp/test
search='TARGETDIR="/home/"'
replace='TARGETDIR="'"${rep_candidat}"'"'
echo On recherche : "${search}"
echo On veut remplacer par "${replace}"
sed -i 's#'"${search}"'#'"${replace}"'#' FICHIER
extraordinaire cette façon de voir les choses. Tout est réellement plus clair, surtout que je ne maîtrise pas encore bien les " ’ \ {} … bref le plus important…
Merci, cela répond parfaitement à mes attentes 
Et le coup du dièse pour remplacer la barre oblique dans sed, je ne connaissais pas