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 :

Supprimer qques lignes spécifiques d'un fichier


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 124
    Points : 52
    Points
    52
    Par défaut Supprimer qques lignes spécifiques d'un fichier
    hello !

    Voilà, j'ai un spam, et j'aimerais virer les headers qui trainent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Received: from alice.net (localhost [127.0.0.1])
    by m0101 (Postfix) with SMTP id 353851C00095
    for <spam@krispy.net>; Sat, 11 Mar 2006 08:59:48 +0100 (CET)
    Received: from mwumf0201.m6.fr (smtp1.m6.fr [160.92.123.81])
    by m0101 (Postfix) with ESMTP id 280F61C00090
    for <spam@krispy.net>; Sat, 11 Mar 2006 08:59:48 +0100 (CET)
    Received: from alice.net (localhost [127.0.0.1])
    Alors p
    our ce faire, j'ai pensé utiliser ce script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #!/usr/bin/perl
    use strict;
    my $Old_Fic = "spam.txt";
    my $New_Fic = "spam_new.txt";
    open(OLD, "$Old_Fic") or die("Lecture de $Old_Fic impossible : $!");
    open(NEW, ">$New_Fic") or die("Creation de $New_Fic impossible : $!");
    while(<OLD>)
    {
        if ( ($_ =~ /krispy/i))
        {
     
        }
        else
        {
            print NEW $_;
        }
    }
    close(OLD);
    close(NEW);
    Le probleme, c'est qu'il n'est pas très pertinent, et surtout l'expression reguliere est foireuse.
    Une idée de comment l'améliorer ?
    j'aimerais qu'il vire les lignes contenant krispy.net OU m0101 ( ma machine )
    ou alors un truc plus générique qui virerrait cela bien comme il faut

    Merci

  2. #2
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 124
    Points : 52
    Points
    52
    Par défaut
    Bon. j'ai viré de façon plus ou moins facile les headers embetants.

    malheureusement, comment virer ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    X-Scanner: exiscan
     
    X-Spam-Report: Systeme antispam de Metropole Television m6.fr
     
    	Content analysis details:   (29.0 points, 5.0 required)
     
    	pts rule name              description
     
    	---- ---------------------- --------------------------------------------------
     
    	1.7 SARE_HEAD_HDR_XIDKEY   Apparent spam sign in headers
     
    	4.4 HELO_DYNAMIC_IPADDR    Relay HELO'd using suspicious hostname (IP addr 1)
     
    	1.4 DATE_IN_PAST_96_XX     Date: is 96 hours or more before Received: date
     
    	1.2 FORGED_HOTMAIL_RCVD2   hotmail.com 'From' address, but no 'Received:'
     
    	4.0 M6_PILLS               BODY: pills dans le corps
     
    	3.0 M6_MEDICATION          BODY: medication cache spam
     
    	0.0 HTML_40_50             BODY: Message is 40% to 50% HTML
     
    	4.4 HTML_IMAGE_ONLY_12     BODY: HTML: images with 800-1200 bytes of words
     
    	0.0 HTML_MESSAGE           BODY: HTML included in message
     
    	0.8 HTML_FONT_LOW_CONTRAST BODY: HTML font color similar to background
     
    	4.9 BAYES_99               BODY: Bayesian spam probability is 99 to 100%
     
    	[score: 1.0000]
     
    	0.2 MIME_HTML_ONLY         BODY: Message only has text/html MIME parts
     
    	0.7 SARE_HTML_FONT_INVIS1  RAW: Message contains nearly white color text
     
    	0.2 SARE_HTML_BODY_2SP     RAW: HTML tag is strangely formed
     
    	1.7 SARE_HTML_IMG_2AT      RAW: strange internal image link
     
    	0.5 SARE_HTML_COLOR_NWHT   HTML contains nearly white color (F.F.F.)
     
    Message-Id: <E1FHxre-0000cK-00@mail2.m6.fr>
     
    X-Scanner: exiscan *1FHxre-0000cK-00*o36tme.sxF6* http://duncanthrax.net/exiscan/
     
    X-WUM-spamlevel: high
     
    X-WUM-spamrating: 99.352069

    la ligne commencant par X-Spam-Report: et finissant par X-WUM-spamrating: 99.352069

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 124
    Points : 52
    Points
    52
    Par défaut
    Je rajoute le code qui a déjà été fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    #!/usr/bin/perl
     
    use strict;
     
    my $Old_Fic = "spam.txt";
    my $New_Fic = "spam_new.txt";
    my $command = "alice\|\|[mM][0-2][0-2]";
     
    my $header_filter=0;
    my $header_filter_start="X-Scanner:";
    my $header_filter_end="X-WUM-spamrating";
     
    open(OLD, "$Old_Fic") or die("Lecture de $Old_Fic impossible : $!");
    open(NEW, ">$New_Fic") or die("Creation de $New_Fic impossible : $!");
     
    while(<OLD>)
    	{
    	if ($_ =~ /$header_filter_start/i)
    		{
    		$header_filter=1;
    		#print $_;
    		}
     
    	if ($_ =~ /$header_filter_end/i)
    		{
    		$header_filter=0;
    		#print $_;
    		}
     
    	if ( ($_ =~ /$command/i)  and ($header_filter==0) )
    		{
    		print $_; # File does not contain Regular Expression
    		}
    	else
    		{
    		print NEW $_;
    		}
    }
    close(OLD);
    close(NEW);

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Points : 208
    Points
    208
    Par défaut
    Salut,

    tu peux essayer aussi quelque chose de genre

    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 warnings;
     
    open R,"lire.txt" or die "E/S : $!\n";
    open W, ">write.txt" or die "E/S : $!\n";
     
    while (<R>){
            next if /^X-Scanner:/../^X-WUM-spamrating/;# saute tout ce que ce trouve entre tes limites
            print W $_;
    }

Discussions similaires

  1. Supprimer des lignes spécifiques d'un fichier
    Par Noirham dans le forum Langage
    Réponses: 4
    Dernier message: 20/06/2011, 16h50
  2. Réponses: 0
    Dernier message: 03/09/2007, 19h09
  3. Réponses: 4
    Dernier message: 26/07/2007, 11h35
  4. Ecriture dans une ligne spécifique d'un fichier texte
    Par X-plode dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 15/07/2007, 08h46
  5. Réponses: 2
    Dernier message: 04/05/2006, 13h10

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