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
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
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.
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