Appliquer un scrypte sur des fichiers

Fabien -  
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   -
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 388 Statut Membre 34
 
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 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
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 388 Statut Membre 34
 
"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 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
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 388 Statut Membre 34
 
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 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
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