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 :

Rechercher Remplacer en Perl ou autre


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Gérant d'entreprise
    Inscrit en
    Octobre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gérant d'entreprise

    Informations forums :
    Inscription : Octobre 2008
    Messages : 17
    Par défaut Rechercher Remplacer en Perl ou autre
    Bonjour,

    J'ai eu un virus qui a injecté du code dans mes pages HTML et dans des fichiers JS.
    J'ai des milliers de fichiers infectés aussi je voudrai automatiser la correction de mes fichiers qui se trouvent dans des répertoires et sous répertoires.
    Le virus se présente de la manière suivante :
    </*qpi*/> Fonction parfois sur plusieurs lignes </*qpi*/>
    Le but est donc de chercher dans tous les fichiers le début qpi et la fin et de supprimer tout ce qu'il y a entre les 2 qpi y compris les qpi.

    Mon cousin ma écrit ce petit script à lancer sous linux :
    find / -type f -exec perl -i -0777 -pe 's{/\*qpi\*/.*?/\*qpi\*/}sg' {} \;
    il a fonctionné une fois dans un répertoire et ne veut plus fonctionner pour l'instant.

    Auriez-vous des conseils à me donner pour améliorer ce script?
    Est-il possible d'en créer un en PHP ou autre pour l'éxécuter directement côté serveur?

    Merci.

    Avancées, j'ai trouvé une syntaxe qui fonctionne :
    find /home/répertoire/ -type f -exec perl -i -0777 -pe 's/\qpi*.?qpi\b//sg' {} \;

    Le problème avec cette syntaxe c'est que si un fichier contient 2 fois qpi, tous les caractères seront supprimés entre ces 2 qpi.

    Le virus se présente sous la forme /*qpi*/ ou <!--qpi-->
    Comment puis-je intégrer cette syntaxe sans que les symboles soient mal interprétés?

  2. #2
    Membre actif
    Avatar de Grumphette
    Homme Profil pro
    Validation manager
    Inscrit en
    Juillet 2008
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Validation manager

    Informations forums :
    Inscription : Juillet 2008
    Messages : 81
    Par défaut
    ce que ton cousin a fait, tu aurait pu le faire simplement en bash avec sed, pas la peine d'utiliser sur perl.

    Je te conseille donc un script bash du type :

    for file in `ls -R /directory/a/traiter`
    do
    sed -i "s/</\*qpi\*/>.*?</\*qpi\*/>//g" $file
    sed -i "s/<!--qpi-->.*?<!--qpi-->//g" $file
    done

    Par contre je trouve que tu te contredis entre le début de ton message et la fin. Est ce que ce sont des balise qpi qui entoure le code défectueux, ou simplement des /*qpi*/ et <!--qpi--> qui traîne dans le code et donc la suppression du code entre deux balise qpi est mal venu.

    Mais je pense que ton post est mal placé, ton soucis est relatif à l’écriture d'une expression régulière, et non un pb de perl.

Discussions similaires

  1. sed/awk/autre : rechercher-remplacer complexe
    Par victor_gasgas dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 27/12/2013, 09h56
  2. Réponses: 3
    Dernier message: 11/06/2009, 17h49
  3. Réponses: 5
    Dernier message: 18/06/2008, 15h11
  4. Rechercher -> remplacer ?
    Par Joul dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/09/2005, 02h03
  5. Rechercher un enregistrement sur un autre formulaire
    Par Grosmou dans le forum Access
    Réponses: 3
    Dernier message: 12/09/2005, 13h58

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