Forum Clubic

Perl : effacer ligne contenant chaine de caractère

Bonjour à toutes et tous

Je possède un fichier texte que j’aimerais “écrémer”.

En voici un extrait :

mac-user 00:00:00:00:00:00
vlan-name = default

mac-user00:00:00:00:00:01
vlan-name = default

J’aimerais supprimé les lignes “vides” mais également celles contenant la chaine “vlan-name = default” comment faire pour le faire dans un script Perl ?

Merci beaucoup de votre aide :wink:
Edité le 06/10/2010 à 13:48

Il te faut :

  • Fonction d’ouverture et de lecture de fichier
  • Expression régulière
  • Fonction de remplacement de chaîne
  • Fonction d’écriture et de fermeture de fichier

J’ai trouvé une solution qui fonctionne mais ce n’est peut être pas la plus propre :

open(FILE, "< AAA.txt" ) or die ("prob a l'ouverture du fichier" );
@save = <FILE>;
close(FILE);
foreach (@save)
{
 $_ = "" if ($_ =~ m/vlan-name = default/);
chomp $_;
}
open(FILE, ">AAA.txt" )
or die ("prob a l'ouverture du fichier" );
foreach (@save)
{
print FILE $_."\n" if ($_);
}
close(FILE);

#****************************************************
# II) Supprime les lignes vides
#****************************************************

sub SupLigneVide {                                                                                                                                                                                                                              
  my ($file) = @_;                                                                                                                                                                                                                          
  my $temp = "$file.bak";                                                                                                                                                                                                                   
  rename($file, $temp);                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                
  open NOUVEAU, '>', $file;                                                                                                                                                                                                                 
  open ANCIEN,  '<', $temp;                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                
  while(<ANCIEN>) { # ligne stockée automatiquement dans $_                                                                                                                                                                                 
    next if /^\s*$/;                                                                                                                                                                                                                        
    print NOUVEAU;                                                                                                                                                                                                                          
  }                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                
  close ANCIEN;                                                                                                                                                                                
  close NOUVEAU;                                                                                                                                                                                                              
  unlink $temp;                                                                                                                                                                                                                     
}

&SupLigneVide("AAA.txt");