Copier un fichier tout en supprimant des lignes

Bulld0 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à vous!

Je suis débutant en langage de programmation "Perl" et je voudrais savoir si quelqu'un sait comment, dans un script, je peux copier un fichier et son contenu mais en enlevant par la meme occasion des lignes présentes dans ce fichier qui sont comprisent entre deux phrases ?

Par exemple : je souhaite copier le fichier toto.conf ailleurs tout en supprimant les lignes comprises entre les mot BEGIN et END.

J'ai essaye avec la commande sed '/BEGIN/, /END/d' toto.conf mais ca ne fonctionne pas ! Help ! :)
Et ce qu'il me faut, c'est une suppresion et une sauvegarde du nouveau fichier (sans les lignes en gros)

Merci beaucoup de votre aide
A voir également:

1 réponse

[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
Salut Bulld0,

Avec Perl, tu peux utiliser les modificateurs m et s pour traiter le contenu de la regexp comme matchant de multiples lignes sur une seule et matcher BEGIN et END et les caractères de début et fin de lignes sur lesquelles ils sont autant de fois que nécessaire pour faire tes substitutions.

Par exemple, comme cela :

#!/usr/bin/perl

use strict;
use warnings;

my $st = <<EOT;
Bonjour à vous!
BEGIN
Je suis débutant en langage de programmation "Perl" et je voudrais savoir si quelqu'un sait comment, dans un script, je peux copier un fichier et son contenu mais en enlevant par la meme occasion des lignes présentes dans ce fichier qui sont comprisent entre deux phrases ?
END
Par exemple : je souhaite copier le fichier toto.conf ailleurs tout en supprimant les lignes comprises entre les mot BEGIN et END.
BEGIN
J'ai essaye avec la commande sed '/BEGIN/, /END/d' toto.conf mais ca ne fonctionne pas ! Help ! :)
Et ce qu'il me faut, c'est une suppresion et une sauvegarde du nouveau fichier (sans les lignes en gros)
END
Merci beaucoup de votre aide
EOT
;

while ($st =~ m/(.*?)(^BEGIN.*?^END$)(.*)/msg) {
    $st = $1 . $3;
}
print "$st";


Dal
0