|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Nouveau Membre du Club
![]() Inscription : mai 2009 Messages : 105 ![]() |
Bonjour
J'ai un problème : je souhaite insérer du texte dans un fichier après l'avoir récupéré dans ce même fichier. Même en essayant de mettre ma variable entre $(), ça ne fonctionne pas. Je m'explique : Code :
Je suis bloquée depuis des jours :s Cordialement Ginger |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() |
Bonsoir,
Pour ajouter du contenu à un fichier existant il faut doubler les chevrons: ">>" au lieu de ">". Le chevron simple écrase le fichier existant avant d'écrire.
__________________
www.nudge.org Surveillez et optimisez vos applications Java |
|
|
10
|
|
|
#3 |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 064 ![]() |
bonjour ginger,
contrairement à ce que tu sembles croire for ne lis pas les données ligne à ligne, mais élément par élément. En conséquence, en général, on évite idem pour - plutôt que des cut pipés, utilise sed. - si tu poses ta question ici, c'est que tu utilises GNU/linux, et donc GNU sed, alors : Code :
sed -i.old "/^function/ i\ \n\/**\n* function $(nom) : " $i |
|
|
10
|
|
|
#4 | ||||||
|
Nouveau Membre du Club
![]() Inscription : mai 2009 Messages : 105 ![]() |
Bonjour
Merci pour vos réponses Nudger si je mets deux chevrons, mon fichier devient : Code :
Code :
N_BaH j'ai utilisé ton code sed, j'ai une erreur me disant zsh: command not found: nom Du coup j'ai essayé sans le $(), avec des ``, etc... c'est toujours pareil, donc j'ai essayé de faire ceci : Code :
cat $i | sed -i.old "/^function/ i\ \n\/**\n* function "•$nom•" : " $i Code :
Code :
cat $i | sed -i.old "/^function/ i\ \n\/**\n* function ".$nom." : " $i sed: -e expression n°1, caractère 46: caractères inutiles après la commande Comment faire une concaténation en sed si c'est ça la solution ? Cordialement, Ginger |
||||||
|
|
00
|
|
|
#5 | |
![]() ![]() Idriss NeumannConsultant en SSII et étudiant au CNAM Paris (ingénieur SI) Inscription : février 2009 Messages : 1 971 ![]() |
Salut.
Citation:
Pour des scripts vaut mieux quelque chose de "standard" comme Bash, Sh ou encore Ksh. Cordialement, Idriss |
|
|
00
|
|
|
#6 |
|
Nouveau Membre du Club
![]() Inscription : mai 2009 Messages : 105 ![]() |
Dans mon script j'ai mis cette ligne au tout début :
Mais je teste en copiant directement le bout de code que j'ai mis dans mon premier post. J'ai donc essayé de tester pareillement avec en plus ce bout de code, mais ça donne la même chose. |
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 064 ![]() |
ce n'est pas mon code, j'ai copié/collé sans relire ce que tu avais écrit, sans uuoc, et avec l'option -i, pour faire une sauvegarde du fichier original.
J'ai un peu de mal à comprendre le but de ton script : il ne s'agit que d'ajouter les "balises" de commentaires avant chaque fonction ? un avant-après d'un fichier exemple ne serait pas inutile pour comprendre ce que tu souhaites faire... |
|
|
10
|
|
|
#8 | ||||
|
Nouveau Membre du Club
![]() Inscription : mai 2009 Messages : 105 ![]() |
Oui c'est exactement ça, et même un peu plus :
fichier de départ : Code :
Code :
|
||||
|
|
00
|
|
|
#9 | ||||||
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 064 ![]() |
bon, pour répondre à ta question initiale (parce que ce n'est pas corriger ton script qu'il faut faire mais le réécrire) :
Code Exemple :
Code :
Code :
|
||||||
|
|
10
|
|
|
#10 | ||||||
|
Nouveau Membre du Club
![]() Inscription : mai 2009 Messages : 105 ![]() |
J'ai trouvé cette ligne de code au gré des recherches :
Code :
Code :
Code :
Comme ca je pourrai traiter fonction par fonction et enfin pouvoir faire ce sur quoi je suis bloquée depuis 1 semaine Une idée de comment y parvenir ? |
||||||
|
|
00
|
|
|
#11 | ||
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 064 ![]() |
Code :
|
||
|
|
10
|
|
|
#12 | ||||
|
Nouveau Membre du Club
![]() Inscription : mai 2009 Messages : 105 ![]() |
Bonjour
Je crois comprendre pourquoi je n'arrive pas à insérer la valeur de ma variable... En fait au départ le définie ma variable comme ceci : Code :
nom=$(echo $begin | cut -d " " -f 2 | cut -d "(" -f 1) Code :
cat $i | sed 's/^function/\n\/**\n* function' $nom ' : \n* @param nomparam : \n* @return\n*\/\nfunction/' > $i Code :
cat $i | sed 's/^function/\n\/**\n* function quelquechose : \n* @param nomparam : \n* @return\n*\/\nfunction/' > $i Code :
J'ai affiché ma commande dans une variable pour voir ce que ca ecrit : Code :
Ginger |
||||
|
|
00
|
|
|
#13 | ||||||||
|
Nouveau Membre du Club
![]() Inscription : mai 2009 Messages : 105 ![]() |
Bonjour
J'ai réussi à insérer les noms des fonctions correctement, et presque pour les parametres. Mon fichier de depart : Code :
Code :
Code :
Code :
Cordialement, Ginger |
||||||||
|
|
00
|
|
|
#14 |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 064 ![]() |
Bonjour,
Te rends-tu compte que le même fichier est lu 5 fois au cours de ton script ? un simple boucle while read line; do...; done <fichierdevrait te permettre de faire ce que tu veux... oublie awk et sed (pour l'instant). si "$line" commence par "function", alors tu découpes la ligne pour récupérer les éléments qui t'intéressent tu envoies le résultat dans un fichier temporaire tu envoies la ligne dans le même fichier temporaire si "$line" ne correspond pas, alors tu l'envoies dans le fichier temporaire ... mais il ne devrait même pas y avoir autant d'écritures, en fait, tu ne feras que des echo, et à la fin de la boucle while tu enverras tout dans un fichier temporaire, avant d'écraser l'original. ET, je te le dis encore une fois, on ne fait pas for item in `commande` ! |
|
|
10
|
|
|
#15 | ||
|
Nouveau Membre du Club
![]() Inscription : mai 2009 Messages : 105 ![]() |
Bonjour
Merci pour ta réponse, j'ai modifié le for item in `cmd` en ceci : Code :
Ginger |
||
|
|
00
|
|
|
#16 |
|
Nouveau Membre du Club
![]() Inscription : mai 2009 Messages : 105 ![]() |
Bonjour
Je cherche à parser en shell ou awk ou autre, ce genre de texte : Code :
function hey(){- p3){- function gna(p1){- Une petite idée ? |
|
|
00
|
|
|
#17 | ||
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 064 ![]() |
bonjour,
Code bash :
|
||
|
|
00
|
|
|
#18 |
|
Nouveau Membre du Club
![]() Inscription : mai 2009 Messages : 105 ![]() |
Merci N_BaH
Quelle est la différence entre : et : ? Ca affiche la même chose... A quoi sert le dièse ? Sinon ça affiche pas tout le résultat mais seulement le premier... : |
|
|
00
|
|
|
#19 |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 064 ![]() |
ah
il faudrait utiliser au minimum bash, pour pouvoir utiliser des tableaux/listes. le # (#<espace>)est censé supprimer l'espace qui apparaît au début des valeurs. |
|
|
00
|
|
|
#20 | ||||||
|
Nouveau Membre du Club
![]() Inscription : mai 2009 Messages : 105 ![]() |
Merci pour l'explication
Je viens de tester mon code dans un fichier bash au lieu de sh mais ca change rien, je ne recupere que le premier resultat "function hey(){" Tu es sûr que je ne peux pas utiliser de tableaux en sh ? EDIT J'ai une question : quand je veux supprimer un fichier directement en ligne de commande sous la console et que je le recréé après via mon_fichier.sh, ça fonctionne bien ; mais quand j'écris cette commande dans un fichier ça fait quelque chose de bizarre. Je m'explique : Dans le premier cas, si je supprime sous la console le fichier temp.txt, comme ceci : ça me le supprime, et quand je le recréé via mon_fichier.sh (que je lance donc sous la console) j'y écris ceci : Code :
Mais quand je tente de supprimer temp.txt directement via mon_fichier.sh, et que ensuite je le recréé ça écrit ceci : Dans mon_fichier.sh, j'ai ecrit ceci afin de supprimer temp.txt : Code :
Puis je le recréé comme ceci (toujours dans mon_fichier.sh) : Code :
|
||||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com