Partage
  • Partager sur Facebook
  • Partager sur Twitter

[BASH] Envoyer un fichier en paramètres

Sujet résolu
    27 novembre 2008 à 21:31:36

    Bonjour à tous, déjà il faut que je vous préviennes, je suis un très gros débutant en Bash, j'ai commencé cette après-midi.

    Voilà, j'ai un fichier 'Fichier' :
    #Auteur : NOM
    #Date de création : DATE
    


    Je voudrai copier ce fichier, remplacer les mots NOM et DATE par des chaines de caractères passé en paramètres de mon fichier Bash comme ci-dessous: (si vous avez une meilleur méthode pour effectuer les mêmes remplacements je suis preneur)
    sed "s/NOM/"$USER"/g" Fichier | sed "s/DATE/dateActuelle/g" > Fichier_copie
    


    ce que j'aimerai dans un premier temps c'est factoriser ce code (en créant une fonction par exemple) pour que je puisse appliquer ces mêmes transformations à plusieurs fichiers :

    parse(){
        echo $1 | sed "s/NOM/"$USER"/g" | sed "s/DATE/dateActuelle/g"
    }
    
    parse Fichier1 > Fichier1_copie
    parse Fichier2 > Fichier2_copie
    parse Fichier3 > Fichier3_copie
    


    Mais ce code ne marche pas, $1 ne désigne plus Fichier, mais contiens la chaine de caractère 'Fichier'.
    Mon premier problème est donc celui-ci : Comment passer un fichier en paramètres a ma fonction ? (ou utiliser une autre méthode pour effectuer la même factorisation)

    Deuxième petit problème (moins important) je voudrai remplacer la chaine DATE par la date actuelle, j'ai tester comme ci-dessous, mais apparemment ce n'est pas la bonne solution :
    sed "s/DATE/"$(date)"/g"
    


    Voilà, merci d'avance pour vos solutions.

    PS : j'ai testé ce code, mais la copie du fichier s'arrête au premier espace rencontré:
    (apparemment $1 = '#Auteur', $2 = ':', $3 = 'NOM', $4 = '#Date'...)
    parse(){
        echo $1 | sed "s/NOM/"$USER"/g" | sed "s/DATE/dateActuelle/g"
    }
    
    parse $(cat Fichier1) > Fichier1_copie
    
    • Partager sur Facebook
    • Partager sur Twitter
      27 novembre 2008 à 22:24:12

      Salut,

      parse(){
          echo $1 | sed "s/NOM/"$USER"/g" $1 | sed "s/DATE/dateActuelle/g"
      }
      

      Pourquoi ce echo ? Tu peux faire directement
      parse(){
          sed "s/NOM/"$USER"/g" $1 | sed "s/DATE/dateActuelle/g"
      }
      


      Par ailleurs :
      — les variables sont expansées dans une chaîne entre doubles quotes, donc tu peux écrire "s/NOM/$USER/g" et "s/DATE/$(date)/g"  ;
      — plutôt que d’enchaîner deux appels à sed, tu peux passer à sed plusieurs commandes successives : sed "s/NOM/$USER/g; s/DATE/$(date)/g" $1 .
      • Partager sur Facebook
      • Partager sur Twitter
        27 novembre 2008 à 23:21:24

        Merci, cela améliore mon programme :).
        Mais le problème persiste non ? $1 est une chaine de caractères au lieu d'être un fichier.
        A moins que sed marche aussi pour la modification de chaines de caractères... dans ce cas la fonction marche, reste à arriver à avoir le contenue de mon fichier dans une variable. :/ une idée ?

        PS : je n'ai pas Linux chez moi je ne peux donc pas procéder à des tests. Et pour le manuel sur sed : http://pwet.fr/man/linux/commandes/posix/sed, apparemment on ne peut lui envoyer qu'un fichier. Mais peut être existe il une autre fonction que sed ?
        • Partager sur Facebook
        • Partager sur Twitter
          27 novembre 2008 à 23:33:36

          Citation : heero78

          Mais le problème persiste non ? $1 est une chaine de caractères au lieu d'être un fichier.


          Oui, une chaîne de caractères contenant le nom du fichier. sed va donc ouvrir le fichier en question et le traiter. C’est bien ce que tu veux, non ?
          • Partager sur Facebook
          • Partager sur Twitter
            27 novembre 2008 à 23:41:10

            Oki, oui c'est ce que je cherche. Je testerai donc demain dés que possible. ^^

            Merci encore.
            • Partager sur Facebook
            • Partager sur Twitter

            [BASH] Envoyer un fichier en paramètres

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown