Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[HS] Script : manque de pratique

9 réponses
Avatar
Michel Grentzinger
Bonjour,

=C3=87a fait de longs mois que je n'ai plus manipul=C3=A9 de scripts...
Je cherche =C3=A0 produire plusieurs fichiers php =C3=A0 partir du m=C3=AAm=
e mod=C3=A8le en=20
rempla=C3=A7ant certaines parties bien identifi=C3=A9e (NOM1, NOM2, NOM3, e=
tc).

La source des donn=C3=A9es =C3=A0 remplacer est issue d'un fichier txt (1 f=
ichier par=20
mod=C3=A8le). La premi=C3=A8re ligne comporte la valeur de NOM1, la deuxi=
=C3=A8me de NOM2,=20
etc.

Je ne sais pas trop vers quoi m'orienter...=20
Merci pour toute aide !
=2D-=20
Michel Grentzinger
OpenPGP key ID : B2BAFAFA
Available on http://www.keyserver.net

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

9 réponses

Avatar
Thibaut LE LEVIER
Michel Grentzinger wrote:
Bonjour,

Ça fait de longs mois que je n'ai plus manipulé de scripts...
Je cherche à produire plusieurs fichiers php à partir du même modèle en
remplaçant certaines parties bien identifiée (NOM1, NOM2, NOM3, etc).




Sed?

La source des données à remplacer est issue d'un fichier txt (1 fichier par
modèle). La première ligne comporte la valeur de NOM1, la deuxième de NOM2,
etc.

Je ne sais pas trop vers quoi m'orienter...
Merci pour toute aide !




--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Steve
Le 22-05-2008, à 09:37:40 +0200, Michel Grentzinger () a écrit :

Lignes : 30

Bonjour,



Salut,

Ça fait de longs mois que je n'ai plus manipulé de scripts...
Je cherche à produire plusieurs fichiers php à partir du même modèle en
remplaçant certaines parties bien identifiée (NOM1, NOM2, NOM3, etc).

La source des données à remplacer est issue d'un fichier txt (1 fichier par
modèle). La première ligne comporte la valeur de NOM1, la deuxième de NOM2,
etc.

Je ne sais pas trop vers quoi m'orienter...



une boucle contenant un sed ?

Un truc du genre :

for text in `cat infile`
do
string="$text"
sed "s/^/${string}/" $FILE > $NEWFILE
DONE

--
Steve

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Jacques L'helgoualc'h
Michel Grentzinger a écrit, jeudi 22 mai 2008, à 09:37 :
Bonjour,



bonjour,

Ça fait de longs mois que je n'ai plus manipulé de scripts...
Je cherche à produire plusieurs fichiers php à partir du même modèle en
remplaçant certaines parties bien identifiée (NOM1, NOM2, NOM3, etc).

La source des données à remplacer est issue d'un fichier txt (1 fichier par
modèle). La première ligne comporte la valeur de NOM1, la deuxième de NOM2,
etc.

Je ne sais pas trop vers quoi m'orienter...



Suivant tes habitudes, shell + sed, perl, ... ?

Plutôt Perl à mon goût (à cause des boucles multiples), shell = zsh ou
bash + find pour traiter tout un répertoire.

Sed peut aussi produire un script de conversion noms.sed à partir du
fichier noms.txt :)

Merci pour toute aide !



de rien,
--
Jacques L'helgoualc'h

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Michel Grentzinger
Le jeudi 22 mai 2008, Steve a écrit :
> Ça fait de longs mois que je n'ai plus manipulé de scripts...
> Je cherche à produire plusieurs fichiers php à partir du mà ªme modèle en
> remplaçant certaines parties bien identifiée (NOM1, NOM2, NOM 3, etc).
>
> La source des données à remplacer est issue d'un fichier txt (1 fichier
> par modèle). La première ligne comporte la valeur de NOM1, la deuxième de
> NOM2, etc.
>
> Je ne sais pas trop vers quoi m'orienter...

une boucle contenant un sed ?

Un truc du genre :

for text in `cat infile`
do
string="$text"
sed "s/^/${string}/" $FILE > $NEWFILE
DONE



Ok je vois un peu mieux mais comment faire pour que au premier passage il m e
remplace NOM1, au 2ème NOM2, etc

Parce que là, il va remplacer la même portion, non ?

--
Michel Grentzinger
OpenPGP key ID : B2BAFAFA
Available on http://www.keyserver.net

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Jacques L'helgoualc'h
Michel Grentzinger a écrit, jeudi 22 mai 2008, à 20:26 :
Le jeudi 22 mai 2008, Steve a écrit :


[...]
> une boucle contenant un sed ?
>
> Un truc du genre :
>
> for text in `cat infile`
> do
> string="$text"
> sed "s/^/${string}/" $FILE > $NEWFILE
> DONE

Ok je vois un peu mieux mais comment faire pour que au premier passage il me
remplace NOM1, au 2ème NOM2, etc

Parce que là, il va remplacer la même portion, non ?




# En supposant que les NOMs ne contiennent pas de « / »,
# construire d'abord le script sed à partir de la liste
# des noms (dans l'ordre)

<noms.txt sed -e '=' |
sed -e '1~2{s,^,s/NOM,;N;s,n,/,;s,$,/g,}' > noms.sed

# puis l'utiliser

sed -f noms.sed proto.php > resultat.php


Il y a peut-être plus lisible...
--
Jacques L'helgoualc'h

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Edi Stojicevic
* Michel Grentzinger [2008-05-22 09:37:40 +0200] wrote :

Bonjour,

Ça fait de longs mois que je n'ai plus manipulé de scripts...
Je cherche à produire plusieurs fichiers php à partir du même modèle en
remplaçant certaines parties bien identifiée (NOM1, NOM2, NOM3, etc).

La source des données à remplacer est issue d'un fichier txt (1 fichier par
modèle). La première ligne comporte la valeur de NOM1, la deuxième de NOM2,
etc.

Je ne sais pas trop vers quoi m'orienter...
Merci pour toute aide !



Salut,

Il existe une liste de diffusion specialement dédiée au shell scripting
ici :

http://www.debianworld.org/shellscript-fr

@+

--
. ''`. (___/) E d i S T O J I C E V I C
: :' : (='.'=) http://www.debianworld.org
`. `~' (")_(") GPG: 0x1237B032
`-

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Michel Grentzinger
Le jeudi 22 mai 2008, Jacques L'helgoualc'h a écrit :
Michel Grentzinger a écrit, jeudi 22 mai 2008, à 20:26 :
> Le jeudi 22 mai 2008, Steve a écrit :

[...]

> > une boucle contenant un sed ?
> >
> > Un truc du genre :
> >
> > for text in `cat infile`
> > do
> > string="$text"
> > sed "s/^/${string}/" $FILE > $NEWFILE
> > DONE
>
> Ok je vois un peu mieux mais comment faire pour que au premier passage il
> me remplace NOM1, au 2ème NOM2, etc
>
> Parce que là, il va remplacer la même portion, non ?

# En supposant que les NOMs ne contiennent pas de « / »,
# construire d'abord le script sed à partir de la liste
# des noms (dans l'ordre)

<noms.txt sed -e '=' |
sed -e '1~2{s,^,s/NOM,;N;s,n,/,;s,$,/g,}' > noms.sed

# puis l'utiliser

sed -f noms.sed proto.php > resultat.php


Il y a peut-être plus lisible...



Merci infiniment de ton aide mais je n'ai rien compris à ton script sed ! ;-)
Je crois qu'en tapant les noms à la main j'irai plus vite ...

--
Michel Grentzinger
OpenPGP key ID : B2BAFAFA
Available on http://www.keyserver.net

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Jacques L'helgoualc'h
Michel Grentzinger a écrit, vendredi 23 mai 2008, à 16:15 :
Le jeudi 22 mai 2008, Jacques L'helgoualc'h a écrit :


[...]
> <noms.txt sed -e '=' |
> sed -e '1~2{s,^,s/NOM,;N;s,n,/,;s,$,/g,}' > noms.sed
>
> # puis l'utiliser
>
> sed -f noms.sed proto.php > resultat.php
>
> Il y a peut-être plus lisible...

Merci infiniment de ton aide mais je n'ai rien compris à ton script sed ! ;-)



Oui, sed n'est pas très facile à (re)lire :/ --- mais il *peut* le faire.

Je crois qu'en tapant les noms à la main j'irai plus vite ...



Ben, tu dois les taper une seule fois avec l'éditeur de ton choix

$ cat <<FIN >noms.txt
]bidule
]chose
]machin
]truc
]FIN



Ensuite, le premier sed numérote les lignes,

$ sed -e '=' <noms.txt
1
bidule
2
chose
3
machin
4
truc

le deuxième fusionne les lignes impaires (numéro) et paires (nom), pour
en faire le script de substitution

$ sed -e '=' <noms.txt | sed -e '1~2{s,^,s/NOM,;N;s,n,/,;s,$,/g,}'
s/NOM1/bidule/g
s/NOM2/chose/g
s/NOM3/machin/g
s/NOM4/truc/g


1~2{ # sur une ligne impaire
s,^,s/NOM, # ajoute « s/NOM » devant le numéro
N # accole la ligne suivante après un n
s,n,/, # remplace ce séparateur par celui de la substitution
s,$,/g, # et termine celle-ci avec l'option.
}

Avec Awk ou Perl on peut faire plus clair (encore que ...).
--
Jacques L'helgoualc'h

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Michel Grentzinger
Le vendredi 23 mai 2008, Jacques L'helgoualc'h a écrit :
Avec Awk ou Perl on peut faire plus clair (encore que ...).



Merci pour toutes ses explications ! Ça fait tellement longtemps que mon
livre "Scripts sous linux" n'avait pas été ouvert que les pages se sont
détachées...

Finalement, j'ai utilisé OpenOffice (les données étant dans un tabl eau à
l'origine) avec une formule et uniquement 12 opérations copier-coller pou r
plus de 160 couples prénom-nom.

--
Michel Grentzinger
OpenPGP key ID : B2BAFAFA
Available on http://www.keyserver.net

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact