Appliquer un scrypte sur des fichiers
Fabien
-
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
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.
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
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
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
Salut,
Pourquoi ne pas mettre tout simplement :
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
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
"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...
Je pense que sa liste de fichier et retourné par une autre commande...
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 ...
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 ...
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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