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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2006
    Messages : 11
    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
    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 : 59
    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
    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).

  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
    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
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2006
    Messages : 11
    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
    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
    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 : 59
    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
    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) :

+ Répondre à la discussion
Cette discussion est résolue.

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