# Substitution avec sed dans un script bash - problème

**URL:** <https://www.debian-fr.org/t/substitution-avec-sed-dans-un-script-bash-probleme/80523>\
**Category:** Programmation\
**Created:** [Novembre 2, 2019, 10:32 UTC](https://www.debian-fr.org/t/substitution-avec-sed-dans-un-script-bash-probleme/80523 "2019-11-02T10:32:20Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![guiguitarux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/guiguitarux/32/10039_2.png) [@guiguitarux](https://www.debian-fr.org/u/guiguitarux)\
**Post date:** [Novembre 2, 2019, 10:32 UTC](https://www.debian-fr.org/t/substitution-avec-sed-dans-un-script-bash-probleme/80523/1 "2019-11-02T10:32:20Z")

</div>

Bonjour,

je souhaite remplacer une valeur dans un FICHIER, cette valeur c’est : TARGETDIR=«&nbsp;/home/&nbsp;»

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…

---

<div class="post-metadata">

**Author:** ![anon70622873](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/278dde/32.png) [@anon70622873](https://www.debian-fr.org/u/anon70622873)\
**Post date:** [Novembre 2, 2019, 1:40 UTC](https://www.debian-fr.org/t/substitution-avec-sed-dans-un-script-bash-probleme/80523/2 "2019-11-02T13:40:16Z")

</div>

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 :

```bash
#!/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

```

---

<div class="post-metadata">

**Author:** ![guiguitarux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/guiguitarux/32/10039_2.png) [@guiguitarux](https://www.debian-fr.org/u/guiguitarux)\
**Post date:** [Novembre 2, 2019, 3:12 UTC](https://www.debian-fr.org/t/substitution-avec-sed-dans-un-script-bash-probleme/80523/3 "2019-11-02T15:12:24Z")

</div>

😀 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
