Forum Programmation.perl modification de fichier html en masse avec perl

Posté par  .
Étiquettes : aucune
0
3
oct.
2008
bonjour,
je veux faire un script capable de modifier un ensemble de fichiers html.

par exemple je veux supprimer tous les javascripts et reconvertir les url ne commençant pas par http://

j'ai pas de soucis pour la suppression des javascript, mais j'arrive pas à convertir les url:
je voudrai par exemple qu'une url de ce type href="foo/bar.html" soit transformé en href="ssfoo/foo/bar.html" le pb c'est que j'ai aussi des url commençant par http

#!/bin/sh
perl -0777pe 's/
perl -0777pe 's/a href=\"[^(http:\/\/)]+/a href=\"ssfoo\//gi'-i.bak *.new


après je me retrouve avec ça : href="ssfoo/oo/bar.html" il me cut le f dans ce cas

auriez vous une soluce ?
  • # Re: modification de fichier html en masse avec perl

    Posté par  . Évalué à 1.

    et avec un truc genre :

    Line : chaque ligne de ton fichier...
    Infile : ton fichier ouvert.


    while ($Line=<InFile>)
    {
    if($Line=~ /(.*)<a\ href=\"([^http:\/\/]+\".*)/)
    {
    print $1."<a href=\"ssfoo/".$2;
    }
    }


    Je ne suis pas sûr d'optimiser les accès mais bon...
  • # Les regex c'est riche

    Posté par  . Évalué à 1.

    Si tu ne fais que des transformations avec perl, autant toutes les faire en une fois. Sinon ton .bak ne va pas servir à grand chose.
    Tu peux donc directement mettre tes commandes de substitution dans un fichier commençant par:
    #!/usr/bin/perl -i.bak -p -0777

    Ensuite pour matcher une chaine non suivi d'une autre, c'est (?!motif)
    Voici un mini-memento des assertions de largeur nulle (ils ne sont pas compté dans la chaine matché) bien pratique:
    (?=motif) - Suivi de
    (?!motif) - Non suivi de
    (?<=motif) - Précédé de
    (?<!motif) - Non précédé de


    Donc pour tes besoins ça donne
    s/<script>.*?<\/script>//gi;
    s/(?<=\shref=['"])(?!http:\/\/)/ssfoo\//gi;
    • [^] # Re: Les regex c'est riche

      Posté par  . Évalué à 1.

      Merci , c'est exactement ce que j'essayai de faire :) , avec ce memento ça va bcp mieux.

Suivre le flux des commentaires

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