Substitution avec sed dans un script bash - problème


#1

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…


#2

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

#3

:grinning: 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 :+1:

Et le coup du dièse pour remplacer la barre oblique dans sed, je ne connaissais pas