Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 15/01/2010, 12h02   #1
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 816
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 41
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 816
Points : 1 035
Points : 1 035
Par défaut Remplacement multiples avec sed ?

Bonjour à tous,

je ne suis pas du tout un spécialiste du shell, mais a ce que je vois, il y a nombre de personnes sur ce forum très comptentes.
Alors peut-être une petite idée pour résoudre mon problème :
J'ai un fichier contenant :

...
timeFmt=2
dateFmt=3
sql=select empno, firstnme, lastname, workdept, deptname from jeudessai.employee join jeudessai.department on workdept = deptno where deptno = '&1' order by &2
fileType=pdf
reqType=sql
ifs.ifsOutFile=
ifs.ifsOverWrtFile=true
...


J'appelle mon script avec des paramètres (nombre inconnu voir aucun paramètre) et le but est de substituer le paramètre &1 par $1, &2 par $2 etc... le tout dans un nouveau fichier.

Exemple :

monscript A00 1
qui me donnerait au final dans un nouveau fichier :

...
timeFmt=2
dateFmt=3
sql=select empno, firstnme, lastname, workdept, deptname from jeudessai.employee join jeudessai.department on workdept = deptno where deptno = 'A00' order by 1
fileType=pdf
reqType=sql
ifs.ifsOutFile=
ifs.ifsOverWrtFile=true
...


le &1 ou &2 etc... peuvent-être plusieurs fois dans le fichier.
Une solution ????

Code :
1
2
3
4
while ( test $# -gt 0 ) ; do
????????
shift
done

Dernière modification par K2R400 ; 15/01/2010 à 13h07.
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2010, 13h31   #2
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 896
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 896
Points : 3 676
Points : 3 676
Oui, sed peut faire ce pourquoi il a été conçu : effectuer des modifications dans un fichier.

Typiquement :
Code :
sed 's/ancien/nouveau/' fichier
Une petite précision, en utilisant des variables, il est préférable d'utiliser des guillemets plutôt que des apostrophes :
Code :
sed "s/&1/$1/; s/&2/$2/" ton_fichier > ton_nouveau_fichier
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2010, 14h05   #3
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 816
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 41
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 816
Points : 1 035
Points : 1 035
@N_BaH

merci pour ta réponse.
j'aurai effectivement tendance à utiliser :

Code :
sed -e "s/&1/$1/g" old > new
mais le problème, c'est que je ne connais pas le nombre de paramètres, il peut être variable.
dois-je passer par des copies de fichier dans ma boucle à chaque fois ?
du genre :

Code :
1
2
3
4
5
6
7
i=0
  while ( test $# -gt 0 ) ; do
    let i+=1
    sed -e "s/&${i}/$1/g" old > new
    shift
    cp new old   
  done

Dernière modification par K2R400 ; 15/01/2010 à 14h24.
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2010, 14h40   #4
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 896
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 896
Points : 3 676
Points : 3 676
oui, ça m'a l'air raisonnable; mais plutôt ainsi:
Code :
1
2
3
4
5
6
7
while [ $# -gt 0 ]
 do
   ((i++))
   sed -e "s/&${i}/$1/g" old
   shift
done > new
cp new old
...
?
voire :
Code :
1
2
3
4
5
6
while [ $# -gt 0 ]
 do
   ((i++))
   sed -i "s/&${i}/$1/g" old
   shift
done
si tu disposes de GNU sed.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2010, 14h54   #5
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 816
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 41
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 816
Points : 1 035
Points : 1 035
Je te remercie, ça marche pec !
bravo
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 16h50.


 
 
 
 
Partenaires

Hébergement Web