Forum Programmation.perl Remplacement à la chaine dans un dossier

Posté par  (site web personnel) .
Étiquettes : aucune
0
25
jan.
2005
bonjour,

je suis à la recherche d'un programme me permettant de chercher des motifs (via des regexp) dans différents fichiers d'une arborescence, afin d'y effectuer des remplacements en série, sachant que les chaines que je veux insérer, contiendront des bouts de chaines matchées (entendre par là les références arrières)

Bref je sais pas si c'est très clair, donc un ptit exemple :
je recherche
"plop (.+?), ca va \?" --> va matcher "plop cho7, ca va ?"
et je remplace par
"salut (\1), ca va \?" --> va remplacer par "salut cho7, ca va ?"

Voilou, je vous remercie pour votre aide
  • # Précision

    Posté par  (site web personnel) . Évalué à 2.

    Afin de ne pas embrouiller trop, je précise que les références arrières concernent théoriquement une même expression, donc mon exemple cité ne serait pas viable. Mais l'esprit y est, c'est un peu comme pour easytag, on match l'artiste, la chanson du mp3, etc, et ensuite on le réécrit selon la mise en forme que l'on veut.
    • [^] # Re: Précision

      Posté par  . Évalué à 2.

      s/plop (.+?), ca va \?/salut $1, ca va \?/

      $1 fait reference a l'expression entre parenthese (equivalent a \1 de sed).
    • [^] # Re: Précision

      Posté par  . Évalué à 1.

      Confronté au même problème, je procéderais comme suit :

      Un script php qui ouvre le fichier passé en paramètre et fait les modifs à grand coup de preg_replace ligne après ligne...

      Un script shell qui se charge de chercher les fichiers voulus et les passe au script ci-dessus.

      Il doit certainement y avoir moyen de faire mieux. Probablement à coup de sed, mais c'est une commande que j'utilise peu, et connais donc mal.

      Un des trucs que je trouve génial avec la commande preg_replace de php, c'est que tu peux tout faire avec un seul appel , en utilisant des tableaux de paramèters ! Petit exemple ? Ok :

      $x=0;
      $match{$x] = "Coucou"; $replace[$x++] = "Bonjour";
      $match[$x] = "Bye"; $replace{$x++] = "Au revoir";
      ...
      $chaine = "Coucou machin
      jksdlqj
      blablabla....
      ....
      Bye.";
      $out = preg_replace ($match, $replace, $chaine);

      Remplace Coucou par Bonjour et Bye par Au revoir...

      Je ne pense pas que ce soit possible avec sed....
      Voilà, une fois de plus, j'espère t'avoir aidé et n'avoir pas dit trop d'aneries...
  • # Merci

    Posté par  (site web personnel) . Évalué à 2.

    Merci a tous pour vos propositions.
    J'ai néanmoins trouvé le programme que je cherchais, il marche du feu de dieu (expressions perl ^^) : regexxer
    Merci apt-get :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.