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 :

transformer un mot


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 80
    Par défaut transformer un mot
    Bonsoir,

    Je voudrais utiliser une ligne de perl dans mes scripts bash pour remplacer un mot par un autre (ou le supprimer) dans un texte long.
    Par exemple, avec la commande echo, je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ export origin="a"; export target="a pas" ; \
    >    echo "ça a l'air d'aller" | \
    >    perl -pe 's/(^|[^-])\b$ENV{"origin"}\b(?=$|[^-])/$1$ENV{"target"}/ig'
    ça pas a pas l'air d'aller
    Voilà, vu le résultat, le "a" de ça est remplacé et le "ç" est ignoré, alors qu'il n'y a qu'un seul mot "a" !

    Merci de l'aide,
    Thibaud.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 156
    Par défaut
    Bonjour,
    Essaye d'encadrer ton $ENV{"origin"} par tous les séparateur possibles de ponctuation (espace, tab, ;, : ...)
    Genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -pe 's/(\W)$ENV{"origin"}(\W)/$1$ENV{"target"}$2/g'
    \W: a "non word character"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "Ca a l'air d'aller a. a; a! aa aaa a"
    sera remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ca a pas l'air d'aller a pas. a pas; a pas! aa aaa a pas

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 80
    Par défaut
    Bon, je me répond à moi-même au cas où ça serait utile à d'autres. Voici le script corrigé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/usr/bin/perl
    #
    use encoding "utf-8";
     
    $from=shift;
    $to=shift;
     
    while (<>) {
      s/(^|[^-])\b$from\b(?=$|[^-])/$1$to/ig;
      print;
    }
    Exemple près avoir rendu le script exécutable dans $HOME/bin et nommé replace.ps :
    $ from="a"; to="a pas"; echo "ça a l'air d'aller" | replace.ps "$from" "$to"

    Solution fournie par vamped ici : http://ubuntuforums.org/showthread.php?t=1213806&page=4 (en)

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 25/01/2010, 17h06
  2. transformer un mot en php
    Par hadjiphp dans le forum Langage
    Réponses: 4
    Dernier message: 19/04/2009, 22h58
  3. transformer des mots clef en lien en JS
    Par agrotic dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 26/06/2008, 17h50
  4. [C#] Comment transformer le mot de passe à l'affichage ?
    Par new dotnet(c#) dans le forum Windows Forms
    Réponses: 2
    Dernier message: 26/08/2006, 19h39
  5. [SQL] Commande pour transformer un mot
    Par gandalf_le_blanc dans le forum Langage SQL
    Réponses: 4
    Dernier message: 02/12/2004, 16h58

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