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 :

expression régulière sur plusieurs lignes


Sujet :

Langage Perl

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    620
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 620
    Points : 453
    Points
    453
    Par défaut expression régulière sur plusieurs lignes
    Bonjour,

    Je crois que mon problème est plutôt un problème de Perl... Dans un gros paquet de fichiers, j'ai des lignes de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php include"../../menus/entete2.php";
    entete('Glossaire et notations');
    ?>
    et je voudrais les substituer par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php include"../../menus/mac_entete.php";
    entete('Glossaire et notations',2);
    ?>
    Pour le moment, j'ai la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find  ./ -name \*php -exec perl -p -i.bak -e's/include"\.\.\/\.\.\/menus\/entete2\.php";\s/1/gm' {} \;
    et qui substitue bien les choses comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php 1entete('Glossaire et notations',2);
    ?>
    Mais dès que j'écris quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find  ./ -name \*php -exec perl -p -i.bak -e's/include"\.\.\/\.\.\/menus\/entete2\.php";\sentete/1/gm' {} \;
    Plus rien ne se passe... je gage que mes problèmes sont liés au saut de ligne, mais je ne vois vraiment pas comment résoudre ce problème pour que je puisse substituer les deux lignes d'un coup... si qqn a des suggestions ?

    Merci beaucoup !!

    Hugo


    Oups : sorry, j'ai posté dans le mauvais forum !!!!!!! Si un admin peut me déplacer...

  2. #2
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut
    un saut de ligne en perl s'écrit \n cela pourras p-e résoudre ton problème ...(si c'est un fichier windows essaye \n\r plus tot (ou \r\n je sais jamais :s !!))
    CKL
    N°°b forever
    --
    may the be with you

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    620
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 620
    Points : 453
    Points
    453
    Par défaut
    Salut,

    merci de ta suggestion !!
    Mais le \s contient \r \n \t et \f... et ça veut pas

    Hugo

  4. #4
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut
    exacte j'avais pas vu le \s !!
    mais question à quoi sert ce bout de code:désoler je suis mauvais en utilisation de Perl sur une ligne je connais mal :s
    CKL
    N°°b forever
    --
    may the be with you

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    620
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 620
    Points : 453
    Points
    453
    Par défaut
    sincèrement, je ne me rappelle plus... je ne sais pas si c'est du perl ou bien un truc à ajouter pour le bash ? ce qui a de sûr, c'est que ça n'intervient pas dans la syntaxe des ereg... pour le reste ?

    Sinon, on est venu à bout du problème en trois ereg que voici, pour les curieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    1) met tout sur une ligne
    find  ./ -name \*php -exec perl -p -i.bak -e's/include"\.\.\/\.\.\/\.\.\/liste\/entete3\.php";\s/include"\.\.\/\.\.\/\.\.\/liste\/entete3\.php";/gm' {} \;
    2) fait la correction
    find  ./ -name \*php -exec perl -p -i.bak -e's/include"\.\.\/\.\.\/\.\.\/liste\/entete3\.php";entete\((.*)\);/include"\.\.\/\.\.\/\.\.\/liste\/inc_entete\.php";entete\($1,3\);/g' {} \;
    3) rétablir le saut de ligne
    find  ./ -name \*php -exec perl -p -i.bak -e's/include"\.\.\/\.\.\/\.\.\/liste\/inc_entete\.php";entete\((.*),3\);/include"\.\.\/\.\.\/\.\.\/liste\/inc_entete\.php";\nentete\($1,3\);/g' {} \;
    Pas hyper satisfaisant de le faire en trois coups, mais ça marche...

    Hugo

  6. #6
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    En une seule regexp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    s{include \Q"../../../liste/entete3.php";\E (\s*) entete\((.*)\);}
     {include"../../../liste/inc_entete.php";${1}entete($2, 3);}xgms
    (attention, si tu l'utilise dans un uniligne, n'oublie pas de rajouter l'argument -0777 pour que Perl lise les fichiers entiers)

    --
    Jedaï

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    620
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 620
    Points : 453
    Points
    453
    Par défaut
    Salut Jedai,

    Merci beaucoup !!

    Hugo

Discussions similaires

  1. Expression régulière : chaine sur plusieurs lignes
    Par djibril dans le forum Langage
    Réponses: 1
    Dernier message: 13/03/2014, 13h00
  2. Expression régulière sur plusieurs champs
    Par swanmimouni dans le forum Oracle
    Réponses: 3
    Dernier message: 05/06/2013, 15h03
  3. Besoin d'aide pour remplacer avec expression régulière sur plusieurs lignes
    Par MediaVistaIntel dans le forum Général Python
    Réponses: 11
    Dernier message: 01/12/2011, 14h19
  4. Expression régulière sur même ligne
    Par knebhi dans le forum Langage
    Réponses: 1
    Dernier message: 20/03/2009, 17h49
  5. Define sur plusieurs lignes
    Par Gogoye dans le forum C
    Réponses: 6
    Dernier message: 06/10/2003, 11h45

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