Appliquer un scrypte sur des fichiers

Fermé
Fabien - 20 mars 2009 à 01:22
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 20 mars 2009 à 02:41
Bonjour,

J'ai eu votre contact à travers votre profil sur le site commençamarche.net

J'aurais besoin d'une aide sur du shell.
Supposons que je dispose de plein de fichier du style : fichier1, fichier2....fichierN, tes1,test1,....testN.....

j'ai besoin d'un scrypt qui, lorsque je tape en ligne de commande la ligne suivant :
$ sh modif.sh fichier1 fichier4 fichier 5 fichier3 test2 test5

il faut que ce scrypte récupére les arguments à savoir le fichier1,fichier4, fichier 5, fichier3,test2, et test5 et qu'il exécute un scrypte classic du style une substitution dans chacune de ces fichiers et qu'il les enregistres.

On sait que $1 correspond à fichier1, $2 correspond au fichier2 ......$6 correspond au fichier test5.
Comment écrire une bocle du style une boucle for qui prendrait les fichier un par un pour effectuer une substitution.

Disant que la commande de substitution est : sed -e sed -e 's/oui/non/' fichier

il faut que fichier prends les valeur $1 puis $1 puis $3.....jusqu au nombre de fichier qu'on demande dans les parmétres de commande ( ici 6)


dans le cas ou j'aurais 6 fichier, le scrypte serait donc :

#!/bin/sh
sed -e sed -e 's/oui/non/' $1
sed -e sed -e 's/oui/non/' $2
sed -e sed -e 's/oui/non/' $3
sed -e sed -e 's/oui/non/' $4
sed -e sed -e 's/oui/non/' $5
sed -e sed -e 's/oui/non/' $6


Ne sachant pas le nombre de fichiers sur lesquels que je demande à effectuer la substitution, je ne peux pas exécuter ce genre de scrypte.
Comment pourais-je faire avec une boucle for ou quelque chose de ce style.

Merci de votre aide.

5 réponses

tuxun Messages postés 357 Date d'inscription vendredi 13 mars 2009 Statut Membre Dernière intervention 16 décembre 2010 34
20 mars 2009 à 01:36
Salut
utilise une des "redirection" offertes par ton shell...

en gros tu fais un fichier "listdefichiers" un autre contenant le script, puis tu passe "listedefichier" au scripte...
recherche "redirection shell" ou "pipe shell" sur google!
c'est une technique très puissante, il va falloir que je la réapprenne d'ailleurs...
Tu pourra posté ton résultat stp?
cdt,
TuXuN
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
20 mars 2009 à 01:45
Salut,
Pourquoi ne pas mettre tout simplement :
$ sed -i 's/oui/non/g' fichier1 fichier4 fichier 5 fichier3 test2 test5 


Sinon, pour quand même répondre à la question, tu peux utiliser la variable $# qui contient le nombre d'arguments. Et $* retourne la liste.

Cdlt
0
tuxun Messages postés 357 Date d'inscription vendredi 13 mars 2009 Statut Membre Dernière intervention 16 décembre 2010 34
20 mars 2009 à 01:49
"Ne sachant pas le nombre de fichiers sur lesquels que je demande à effectuer la substitution, je ne peux pas exécuter ce genre de scrypte. "
Je pense que sa liste de fichier et retourné par une autre commande...
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
20 mars 2009 à 01:53
Non, je ne pense pas. Puisque :
j'ai besoin d'un scrypt qui, lorsque je tape en ligne de commande la ligne suivant :
$ sh modif.sh fichier1 fichier4 fichier 5 fichier3 test2 test5


C'est juste qu'il disait que dans son script, il ne pouvait pas mettre sed $1 puis sed $2 etc, puisqu'il ne savait pas le nombre de fichiers. D'où $#.

Mais si le cas (liste de fichiers récupérée d'une commande), il peut très bien piper et utiliser xargs sed ...
0
tuxun Messages postés 357 Date d'inscription vendredi 13 mars 2009 Statut Membre Dernière intervention 16 décembre 2010 34
20 mars 2009 à 02:07
1pt pour fiddy!!! xD
Tu pourrai nous mettre quelques ex de pipes bien tordu?

J'essaie souvent de "pipe" masse de truc louche d'affilées ;)
et a presque chaque fois il y a un probleme...(mauvais comportement)
Ca nous aiderait surement moi et http://www.commentcamarche.net/forum/affich 11614051 commande linux red hat
cdt,
tuxun
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
20 mars 2009 à 02:41
Il n'y a pas de trucs tordus avec les pipes. Il faut juste garder à l'esprit que ça sert pour injecter la sortie d'une commande dans l'entrée d'une autre commande.
Par exemple :
cat fichier t'affichera à l'écran le contenu de fichier.
cat fichier | wc -l t'affichera le nombre de lignes contenues dans fichier. cat fichier est censé afficher le contenu du fichier, mais le pipe va permettre de rediriger l'affichage et de le mettre en entrée de wc -l qui comptera le nombre de lignes.

Cdlt
0