IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

insérer la sortie d'une commande dans un fichier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Par défaut insérer la sortie d'une commande dans un fichier
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #Pour chaque fichier
    for i in `find . -name "*.txt"`; do
        #je recupere chaque ligne qui commence par function
        begin=$(awk 'BEGIN {  }
    		/function/ { print $0 }
        ' $i)
     
        #pour chaque ligne dans $begin
        for fct in $begin; do
                  #recuperer les noms des fonctions
    	      nom=$(echo $fct | cut -d " " -f 2 | cut -d "(" -f 1)
     
                  #recuperer les parametres des fonctions		
    	      var=$(echo $fct | cut -d " " -f 2 | cut -d "(" -f 2 | cut -d ")" -f 1)
     
                  #recuperer chaque mot avant une virgule
                  var2=$(echo $var | sed 's/,/ /g')
        done
     
        #on insère  le nom de la fonction : j'ai essayé simples quotes, doubles quotes, $(), et mélanges aussi....... rien n'y fait soit ça met rien soit ça met $nom au lieu de la valeur qu'elle contient
        cat $i | sed '/^function/ i\ \n\/**\n* function $(nom) : ' > $i
    Comment je peux faire pour insérer le contenu de ma variable dans mon fichier ?

    Je suis bloquée depuis des jours :s

    Cordialement

    Ginger

  2. #2
    Invité
    Invité(e)
    Par défaut
    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.

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 654
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 654
    Par défaut
    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 for i in `cmd`, car ça donne rarement ce qu'on veut.

    idem pour for fct in $begin, cela va itérer à travers tous les éléments de $begin, mais ne pas lire ligne à ligne !

    -
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i.old "/^function/ i\ \n\/**\n* function $(nom) : " $i
    ce qui va insérer la valeur de $nom à chaque ligne qui commence par function.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Par défaut
    Bonjour

    Merci pour vos réponses

    Nudger si je mets deux chevrons, mon fichier devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    /**
    mes commentaires
    */
    function truc(p1,p2){
        //contenu
    }
     
    /**
    mes commentaires
    */
    function chose(){
        //contenu
    }
     
     
    function truc(p1,p2){
        //contenu
    }
     
    function chose(){
        //contenu
    }
    au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /**
    mes commentaires
    */
    function truc(p1,p2){
        //contenu
    }
     
    /**
    mes commentaires
    */
    function chose(){
        //contenu
    }
    Mais merci de la précision je ne savais pas


    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    cat $i | sed -i.old "/^function/ i\ \n\/**\n* function "$nom" : " $i
    La ca n'affiche plus d'erreur mais insere ceci dans mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /**
    * function ?^??^?? :
    function truc(p1,p2){
        //contenu
    }
    La j'ai vu que mes points de concaténation n'en étaient pas donc j'ai corrigé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat $i | sed -i.old "/^function/ i\ \n\/**\n* function ".$nom." : " $i
    Et là j'ai cette erreur :
    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

  5. #5
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Salut.

    Citation Envoyé par ginger4957 Voir le message
    N_BaH j'ai utilisé ton code sed, j'ai une erreur me disant
    zsh: command not found: nom
    T'as mis le shebang pour Bash dans ton script ? #!/bin/bash ?
    Pour des scripts vaut mieux quelque chose de "standard" comme Bash, Sh ou encore Ksh.

    Cordialement,
    Idriss

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Par défaut
    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.

Discussions similaires

  1. Récupérer la sortie d'une commande dans page html
    Par shell13010 dans le forum Réseau/Web
    Réponses: 5
    Dernier message: 19/04/2010, 18h13
  2. Réponses: 2
    Dernier message: 02/04/2009, 12h29
  3. Problème avec une commande dans un fichier .sh
    Par ploxien dans le forum Réseau
    Réponses: 8
    Dernier message: 19/03/2008, 11h55
  4. Copier le resultat d'une commande dans un fichier
    Par Cliff dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 01/02/2007, 16h28
  5. Ecrire le résultat d'une commande dans un fichier de l' OS
    Par Labienus dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/02/2004, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo