# Sed et variable dans script bash \[Résolu\]

**URL:** <https://www.debian-fr.org/t/sed-et-variable-dans-script-bash-resolu/14410>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 5:45 UTC](https://www.debian-fr.org/t/sed-et-variable-dans-script-bash-resolu/14410 "2016-02-20T17:45:55Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![erwik666](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/ed8c4c/32.png) [@erwik666](https://www.debian-fr.org/u/erwik666)\
**Post date:** [Février 20, 2016, 5:45 UTC](https://www.debian-fr.org/t/sed-et-variable-dans-script-bash-resolu/14410/1 "2016-02-20T17:45:55Z")

</div>

J’ai fait un script qui doit créer et remplir des fichiers de configuration à partir d’un modèle, en changeant juste une ligne, j’ai par conséquent utilisé sed, ça me donne ça :

```auto
fichiers = "path des fichiers de configuration"

listefichiers=`ls $fichiers`

for compteur in $listefichiers

do

  ancien="OnlyFiles=\"REGEX[^\/fichierdebase]\""

  nouveau="OnlyFiles=\"REGEX[^\/$compteur]\""

  cp awstats.model.conf awstats.$compteur.conf

  cat awstats.$compteur.conf | sed 's/'"${ancien}"'/'"${nouveau}"'/'

done;
```

Mais ça marche pas, le fichier est bien crée mais reste inchangé, merci d’avance

---

<div class="post-metadata">

**Author:** ![tellmewhy](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/43a26b/32.png) [@tellmewhy](https://www.debian-fr.org/u/tellmewhy)\
**Post date:** [Février 20, 2016, 5:46 UTC](https://www.debian-fr.org/t/sed-et-variable-dans-script-bash-resolu/14410/2 "2016-02-20T17:46:00Z")

</div>

.

---

<div class="post-metadata">

**Author:** ![erwik666](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/ed8c4c/32.png) [@erwik666](https://www.debian-fr.org/u/erwik666)\
**Post date:** [Février 20, 2016, 5:46 UTC](https://www.debian-fr.org/t/sed-et-variable-dans-script-bash-resolu/14410/3 "2016-02-20T17:46:02Z")

</div>

Merci pour ta réponse, bien que ça ne fonctionne pas, je me prends un :

`sed: impossible de lire /home/ericb/awstats.test0.conf: Aucun fichier ou répertoire de ce type
sed: impossible de lire /home/ericb/awstats.test12.conf: Aucun fichier ou répertoire de ce type
sed: impossible de lire /home/ericb/awstats.testa.conf: Aucun fichier ou répertoire de ce type
sed: impossible de lire /home/ericb/awstats.testb.conf: Aucun fichier ou répertoire de ce type
`  
Voici le code en entier, ça sera plus simple :

[code]#!/bin/bash

#emplacement des fichiers telechargeables

fichiers="/home/user/test1"

#emplacement des fichiers de configuration awstat

fichiersconf="/home/user/test2"

#liste de fichiers telechargeables

listefichiers=`ls $fichiers`

#on teste si un fichier de configuration existe pour chaque fichier telechargeable  
echo $fichiersconf  
for compteur in $listefichiers

do

cd $fichiersconf

if [-f “awstats.$compteur.conf”]

then

```
echo ""

```

#si absent, on le cree

#ligne à changer dans le fichier de configuration de base

ancien="“REGEX[^/fichierdebase]”“  
nouveau=”“REGEX[^/$compteur]”"  
echo $ancien  
echo $nouveau  
else

```
cp awstats.model.conf awstats.$compteur.conf

```

fi

done;

for compteur2 in $listefichiers

do  
cd $fichiersconf  
sed -i ‘s/’"${ancien}"’/’"${nouveau}"’/’ ~/awstats.$compteur2.conf

done;

[/code]

---

<div class="post-metadata">

**Author:** ![ripat](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/bc79bd/32.png) [@ripat](https://www.debian-fr.org/u/ripat)\
**Post date:** [Février 20, 2016, 5:46 UTC](https://www.debian-fr.org/t/sed-et-variable-dans-script-bash-resolu/14410/4 "2016-02-20T17:46:02Z")

</div>

Deux petites remarques: au lieu de faire un ls puis d’en rentrer le contenu dans ta boucle for, tu peux directement utiliser le glob du shell:

`for fichier in /path/to/files/*; do
    # traitement
done`

Pour ton sed, essaye:

```auto

```

Edit:  
Je viens de voir le contenu de ta variable $ancien. Sed ne va pas aimer! Il va falloir jongler avec les échappements pour éviter que sed n’interprète les [ et /:

`ancien="OnlyFiles=\"REGEX\[\^\\\/fichierdebase\]\""
sed "s#${ancien}#${nouveau}#" fichier`

---

<div class="post-metadata">

**Author:** ![erwik666](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/ed8c4c/32.png) [@erwik666](https://www.debian-fr.org/u/erwik666)\
**Post date:** [Février 20, 2016, 5:46 UTC](https://www.debian-fr.org/t/sed-et-variable-dans-script-bash-resolu/14410/5 "2016-02-20T17:46:04Z")

</div>

J’obtiens alors ça :

`sed: -e expression n°1, caractère 47: option inconnue pour `s'
sed: -e expression n°1, caractère 47: option inconnue pour `s'
sed: -e expression n°1, caractère 47: option inconnue pour `s'
sed: -e expression n°1, caractère 47: option inconnue pour `s'
`

---

<div class="post-metadata">

**Author:** ![ripat](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/bc79bd/32.png) [@ripat](https://www.debian-fr.org/u/ripat)\
**Post date:** [Février 20, 2016, 5:46 UTC](https://www.debian-fr.org/t/sed-et-variable-dans-script-bash-resolu/14410/6 "2016-02-20T17:46:04Z")

</div>

47? Ça doit être dans $nouveau non? Remplace $nouveau par “zzz” pour voir. Il va falloir chipoter. Le principe est d’échapper tout ce que sed pourrait interpréter comme caractère de contrôle.

---

<div class="post-metadata">

**Author:** ![erwik666](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/ed8c4c/32.png) [@erwik666](https://www.debian-fr.org/u/erwik666)\
**Post date:** [Février 20, 2016, 5:46 UTC](https://www.debian-fr.org/t/sed-et-variable-dans-script-bash-resolu/14410/7 "2016-02-20T17:46:13Z")

</div>

Ça a l’air de marcher, par contre, comment je peux faire pour que ça écrive dans le fichier en sortie? Merci d’avance

---

<div class="post-metadata">

**Author:** ![erwik666](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/ed8c4c/32.png) [@erwik666](https://www.debian-fr.org/u/erwik666)\
**Post date:** [Février 20, 2016, 5:46 UTC](https://www.debian-fr.org/t/sed-et-variable-dans-script-bash-resolu/14410/8 "2016-02-20T17:46:16Z")

</div>

C’est bon ça marche, merci

---

<div class="post-metadata">

**Author:** ![rkusnik](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/b4bc9f/32.png) [@rkusnik](https://www.debian-fr.org/u/rkusnik)\
**Post date:** [Février 21, 2016, 12:14 UTC](https://www.debian-fr.org/t/sed-et-variable-dans-script-bash-resolu/14410/9 "2016-02-21T00:14:29Z")

</div>

Bonjour,

Si jamais vous avez besoin de plus d’informations sur la commande sed, il existe un tutoriel de prise en main tres interressant sur: http:// [man 2 linux: sed](http://man2linux.blogspot.com/search/label/sed)

![:023](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK") ![:023](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK") ![:023](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK")

---

<div class="post-metadata">

**Author:** ![Mimoza](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mimoza/32/3858_2.png) [@Mimoza](https://www.debian-fr.org/u/Mimoza)\
**Post date:** [Février 21, 2016, 12:14 UTC](https://www.debian-fr.org/t/sed-et-variable-dans-script-bash-resolu/14410/10 "2016-02-21T00:14:48Z")

</div>

> [@erwik666](#):
>
> C’est bon ça marche, merci

Met nous le code qui fonctionne, au cas ou quelqu’un d’autre ai le même problème que toi 😛
