[perl] soucis regexp et parcours dir
Fermé
LittleBouda
Messages postés
4
Date d'inscription
lundi 29 janvier 2007
Statut
Membre
Dernière intervention
30 janvier 2007
-
29 janv. 2007 à 23:43
LittleBouda Messages postés 4 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 30 janvier 2007 - 30 janv. 2007 à 12:27
LittleBouda Messages postés 4 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 30 janvier 2007 - 30 janv. 2007 à 12:27
A voir également:
- [perl] soucis regexp et parcours dir
- Win dir stat - Télécharger - Gestion de fichiers
- Mes parcours google - Guide
- Denon perl pro test - Accueil - Audio
- Q dir - Télécharger - Gestion de fichiers
- Install dir - Forum Logiciels
7 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
30 janv. 2007 à 11:22
30 janv. 2007 à 11:22
Salut,
Précision : comme dit en commentaire, le but est de supprimer plusieurs lignes une fois la regExp trouvée.
si ton but est toujours celui là alors tu compliques bien les choses
si tu veux supprimer les lignes qui contennent une regex (c'est ça que j'ai compris) tu n'as qu'à écrire tout bête
lami20j
Précision : comme dit en commentaire, le but est de supprimer plusieurs lignes une fois la regExp trouvée.
si ton but est toujours celui là alors tu compliques bien les choses
si tu veux supprimer les lignes qui contennent une regex (c'est ça que j'ai compris) tu n'as qu'à écrire tout bête
while (<>){ # à remplacer motif avec ta regex print unless /motif/; # je saute la ligne correspondant au motif }et tu exécutes le script avec la commande
perl script.pl mon_test.txt > resultat.txt--
lami20j
LittleBouda
Messages postés
4
Date d'inscription
lundi 29 janvier 2007
Statut
Membre
Dernière intervention
30 janvier 2007
30 janv. 2007 à 10:48
30 janv. 2007 à 10:48
Bon, j'avance petit à petit, cependant, je n'arrive pas :
Ni à supprimer les lignes que je veux ni à faire un remplacement;
J'aimerai bien savoir si mes variables sont bien interprétées dans mon expression régulière, car je ne rentre pas dans la boucle suivante de substitution....
Voilà à quoi ressemble désormais mon script :
#!/usr/bin/perl -w
#############################################################
# Programme perl de parcours de fichiers dans un rértoire. #
# Recherche d'une expression regul dans ces fichiers. #.....#
# Suppressions de nombreuses lignes, une fois l'expReg trouv#
#############################################################
# help : https://docstore.mik.ua/orelly/perl/
$chemin = "/home/boites_test";
opendir REP, $chemin
or die "impossible d'ouvrir le repertoire : $!";
@fichiers = readdir REP;
closedir(REP);
foreach $fichier (@fichiers)
{
# si la valeur retournee est un repertoire
# je passe a la suite :
# next if ($fichier eq "." or $fichier eq "..");
next if -d $fichier;
$full_path="$chemin/$fichier";
print "$full_path\n";
# verifier les droits d'ecriture sur le fichier...
##################################################
open(FILE, "+< $full_path")
or die ("probleme a l'ouverture du fichier : $!" );
#print "$fichier\n";
my @ligne = <FILE>;
#my $chaine = "carton J-F Kahn\.pdf";
my $chaineDeb = "carton J-F Kahn\.pdf";
my $chaineFin = "-------NWM";
my $remplacement = "Cette piece jointe a ete supprime pour cause de surcharge serveur.";
my $i=0;
foreach $ligne(@ligne)
{
#if ($ligne=~/$chaine/)
if ($ligne=~ m/$chaineDeb.*$chaineFin/)
{
print "trouvee";
$ligne=~ s/$chaineDeb.*$chaineFin/$remplacement/;
}
#{
#while ($i<10)
# {
# print "un moulin !!^^\n";
# chomp ($ligne);
# $i++;
# }
#}
}
close(FILE);
Ni à supprimer les lignes que je veux ni à faire un remplacement;
J'aimerai bien savoir si mes variables sont bien interprétées dans mon expression régulière, car je ne rentre pas dans la boucle suivante de substitution....
Voilà à quoi ressemble désormais mon script :
#!/usr/bin/perl -w
#############################################################
# Programme perl de parcours de fichiers dans un rértoire. #
# Recherche d'une expression regul dans ces fichiers. #.....#
# Suppressions de nombreuses lignes, une fois l'expReg trouv#
#############################################################
# help : https://docstore.mik.ua/orelly/perl/
$chemin = "/home/boites_test";
opendir REP, $chemin
or die "impossible d'ouvrir le repertoire : $!";
@fichiers = readdir REP;
closedir(REP);
foreach $fichier (@fichiers)
{
# si la valeur retournee est un repertoire
# je passe a la suite :
# next if ($fichier eq "." or $fichier eq "..");
next if -d $fichier;
$full_path="$chemin/$fichier";
print "$full_path\n";
# verifier les droits d'ecriture sur le fichier...
##################################################
open(FILE, "+< $full_path")
or die ("probleme a l'ouverture du fichier : $!" );
#print "$fichier\n";
my @ligne = <FILE>;
#my $chaine = "carton J-F Kahn\.pdf";
my $chaineDeb = "carton J-F Kahn\.pdf";
my $chaineFin = "-------NWM";
my $remplacement = "Cette piece jointe a ete supprime pour cause de surcharge serveur.";
my $i=0;
foreach $ligne(@ligne)
{
#if ($ligne=~/$chaine/)
if ($ligne=~ m/$chaineDeb.*$chaineFin/)
{
print "trouvee";
$ligne=~ s/$chaineDeb.*$chaineFin/$remplacement/;
}
#{
#while ($i<10)
# {
# print "un moulin !!^^\n";
# chomp ($ligne);
# $i++;
# }
#}
}
close(FILE);
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
30 janv. 2007 à 11:31
30 janv. 2007 à 11:31
pour ne pas dire que sous linux une seule commande avec rgrep ou find combiné avec egrep souffira :-))
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
30 janv. 2007 à 11:46
30 janv. 2007 à 11:46
Et attention, si tu ne travaille dans le répertoire courant ça ne va pas marcher
next if -d $fichier;
tu dois écrire
next if -d $fichier;
tu dois écrire
next if -d $chemin/$fichier
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
LittleBouda
Messages postés
4
Date d'inscription
lundi 29 janvier 2007
Statut
Membre
Dernière intervention
30 janvier 2007
30 janv. 2007 à 11:59
30 janv. 2007 à 11:59
Bonjour,
Merci,
Non, en fait, je veux supprimer un groupe de ligne, situé entre 2 expressions dans tous les fichiers d'un répertoire, et non pas juste la ligne où se trouve l'expression régulière.
exemple de fichier texte :
blablablabla
totototototot
bubu
mqldkfqdjf
smeflkeh
ok
klsdjfklsjd
kdsjfk
Il faut alors supprimer tout ce qui se trouve entre bubu et ok ; la ligne bubu et ok étant comprises.
Merci,
Non, en fait, je veux supprimer un groupe de ligne, situé entre 2 expressions dans tous les fichiers d'un répertoire, et non pas juste la ligne où se trouve l'expression régulière.
exemple de fichier texte :
blablablabla
totototototot
bubu
mqldkfqdjf
smeflkeh
ok
klsdjfklsjd
kdsjfk
Il faut alors supprimer tout ce qui se trouve entre bubu et ok ; la ligne bubu et ok étant comprises.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
30 janv. 2007 à 12:18
30 janv. 2007 à 12:18
Salut,
pour sauter des paragraphes on peut utiliser
et de dire ce que tu veux supprimmer
une des erreurs qui font ceux qui demande
c'est qu'ils ne donnent pas les détails
par exemple dans le cas des regex c'est imperatif
de connaître la structure de fichiers en entrée
et de savoir ce qu'on veut obtenir en sortie
à toi
pour sauter des paragraphes on peut utiliser
while(<>){ # on supprime les paragraphe # compris entre motif_debut et motif_fin print unless /motif_debut/.../motif_fin/; }je pense que ça sera mieux si tu me montre un de tes fichiers
et de dire ce que tu veux supprimmer
une des erreurs qui font ceux qui demande
c'est qu'ils ne donnent pas les détails
par exemple dans le cas des regex c'est imperatif
de connaître la structure de fichiers en entrée
et de savoir ce qu'on veut obtenir en sortie
à toi
LittleBouda
Messages postés
4
Date d'inscription
lundi 29 janvier 2007
Statut
Membre
Dernière intervention
30 janvier 2007
30 janv. 2007 à 12:27
30 janv. 2007 à 12:27
Je t'ai envoyé un mp avec un exemple de fichier à modifier.
J'attend de tes nouvelles, merci.
J'attend de tes nouvelles, merci.