Sed et variable dans script bash [Résolu]

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 :

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

.

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]

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:

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

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'

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.

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

C’est bon ça marche, merci

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:// man2linux.blogspot.com/search/label/sed

:023 :023 :023

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