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

Langage Perl Discussion :

fonction unix en perl


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut fonction unix en perl
    Bonjour,

    Je souhaiterai créer une fonction UNIX afin de simplifier l'utilisation de la fonction: perl -pi -e 's/name1/name2/g' *

    je souhaiterait pouvoir taper:
    replace blonde brune lit

    et que la fonction traduise ça par:
    perl -pi -e 's/blonde/brune/g' *.lit

    Malheureusement ça ne marche pas. Etant débutant, je ne sais pas ce qui pourrait coincer et m'en remet donc a vous.
    En vous remerciant par avance pour votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Crée un alias:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ alias replace="perl -pi -e 's/name1/name2/g'"
    $ replace fic.txt

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Ou une fonction de shell : http://www.gnu.org/software/bash/man...hell-Functions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function replace() {
      perl -pi -e 'BEGIN { ($old, $new) = (shift @ARGV, shift @ARGV); } s/$old/$new/g' $*
    }
    (je ne suis pas certain de la syntaxe, je n'ai pas fait d'essais).
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  4. #4
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Ou un programme Perl replace.pl qui lance ton programme Perl:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/usr/bin/perl;
    my $fichier = $ARGV[0];
    chomp $fichier;
    system ("perl -pi -e 's/name1/name2/g' $fichier");


    (Pas testé, il y a peut-être une bourde quelque part, mais sur le principe, ça marche, je l'ai déjà fait.)

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Merci pour votre aide

    Philou67430. Ta solution ne marche pas, je n'arrive pas à identifier pourquoi

    Lolo78: dans tes solutions, name1 et name2 ne sont pas des variables ce qui est justement le but

    La fonction que je désire doit transformer:
    replace blonde brune lit
    en
    perl -pi -e 's/blonde/brune/g' *.lit

    Mon idée initiale était de faire ça mais ça ne marche pas non plus
    replace() {
    perl -pi -e 's/$1/$2/g' *
    }

    Merci en tout cas pour votre aide

  6. #6
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par chewbie Voir le message
    Lolo78: dans tes solutions, name1 et name2 ne sont pas des variables ce qui est justement le but
    Je ne comprends pas. Tu veux que ce soit codé en dur, ou tu veux les passer en paramètre?

    Dans le premier cas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alias replace="perl -pi -e 's/brune/blonde/g'"
    Dans le second cas, le script sera un choïa plus compliqué, mais c'est faisable.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 41
    Points : 36
    Points
    36
    Par défaut
    Bonjour,

    il faut peut-etre enlever "function" de la versionde Philou en fonction du shell que tu utilise, sinon ça fonctionne

    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
     
    toto@server0:~/tmp/test$ head *
    ==> fichier <==
    elle est blonde
     
    ==> fichier0 <==
    elle est brune
    toto@server0:~/tmp/test$ replace() {   perl -pi -e 'BEGIN { ($old, $new) = (shift @ARGV, shift @ARGV); } s/$old/$new/g' $*; }
    toto@server0:~/tmp/test$
    toto@server0:~/tmp/test$ replace brune blonde *
    toto@server0:~/tmp/test$ head *
    ==> fichier <==
    elle est blonde
     
    ==> fichier0 <==
    elle est blonde

  8. #8
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Alors, ma solution fonctionne, mais elle ne prend pas le dernier argument comme extension de fichier, mais comme liste de fichier.
    En revanche, je viens de voir que sur certains systèmes, la commande "replace" existe déjà, il faudrait donc renommer la fonction bash avec un nom différent, par exemple "r".
    Dans ce contexte, et je viens juste de l'essayer, la commande suivante fonctionne parfaitement (environnement Cygwin) :
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  9. #9
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    A nouveau, merci pour votre aide.
    Je viens d'essayer la solution de gg2laba et ça marche.

    Neanmoins je souhaiterai pouvoir enregistrer cette fonction dans mon .bashrc et ne pas avoir à la redéfinir dans chaque shell. Avez vous un idée pourquoi celà fonctionne directement dans le shell mais pas à partir du .bashrc?

    Merci par avance

  10. #10
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Ca devrait fonctionner... peux-tu montrer l'extrait de ton .bashrc qui défini cette fonction ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  11. #11
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Ben c'est texto la formule que j'ai tapé dans la fenêtre

  12. #12
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Montre quand même
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  13. #13
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Je vois pas trop l'intérêt mais bon:

    # Launch nastran job
    nas() {
    nast20121 $1 scr=yes old=no sdir=/dev/shm
    }
    # Replace content of files
    replace() { perl -pi -e 'BEGIN { ($old, $new) = (shift @ARGV, shift @ARGV); } s/$old/$new/g' $*; }


    Je precise que ma commande nas fonctionne

  14. #14
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Sauf erreur, "replace" est un nom de commande Unix sur certains systèmes. Peux-tu donner le résultat de cette commande :
    As-tu bien activé ton .bashrc dans ton shell courant ? (. ~/.bashrc).
    As-tu essayé avec un autre nom ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  15. #15
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Voici le résultat:

    type replace
    replace is a function
    replace ()
    {
    perl -pi -e 'BEGIN { ($old, $new) = (shift @ARGV, shift @ARGV); } s/$old/$ne w/g' $*
    }

  16. #16
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Pourrais-tu préciser "en quoi" ça "ne marche pas", quand la fonction est définie dans le .bashrc ? (erreur du shell, mauvais fonctionnement, ...)
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  17. #17
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Il ne se passe rien, aucune erreur ou message

  18. #18
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Essaye en remplaçant dans le .bashrc par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    replace ()
    {
    echo "Starting perl";
    perl -pi -e 'BEGIN { ($old, $new) = (shift @ARGV, shift @ARGV); print "Replacing [$old] by [$new]\n" } s/$old/$ne w/g' $*
    }
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  19. #19
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Super, merci Philou, ça marche.

  20. #20
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Je n'ai pas compris : je n'ai fait qu'ajouter des print sur la console... en quoi cela a pu faire "fonctionner" la fonction ?!
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comment fonctionne la fonction find en perl
    Par lavm01 dans le forum Langage
    Réponses: 2
    Dernier message: 10/01/2008, 17h28
  2. [langage] traduction d'un fonction python en perl
    Par ay_pepito dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2007, 15h06
  3. lancer une commande unix avec perl
    Par dm_manu dans le forum Langage
    Réponses: 1
    Dernier message: 02/08/2006, 19h41
  4. Equivalence à la fonction chop() en Perl
    Par samjung dans le forum Langage
    Réponses: 9
    Dernier message: 11/04/2006, 15h41
  5. [langage] Commande Unix en Perl
    Par totox17 dans le forum Langage
    Réponses: 3
    Dernier message: 20/11/2002, 10h59

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