[Perl] Remplacement dans un fichier
Résolu/Fermé
KuKrApOk59
Messages postés
437
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
13 septembre 2013
-
Modifié par KuKrApOk59 le 8/04/2010 à 14:32
KuKrApOk59 Messages postés 437 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 13 septembre 2013 - 15 avril 2010 à 16:03
KuKrApOk59 Messages postés 437 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 13 septembre 2013 - 15 avril 2010 à 16:03
A voir également:
- [Perl] Remplacement dans un fichier
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Coco chat remplacement - Accueil - Réseaux sociaux
- Remplaçant de Coco : quelles solutions pour tchater gratuitement en ligne ? - Accueil - Réseaux sociaux
7 réponses
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
9 avril 2010 à 14:17
9 avril 2010 à 14:17
hello
$file = "/etc/nagios/nrpe.cfg"; open (FILE, "<$file"); @lines = <FILE>; close FILE; open (STDOUT, ">$file"); for ( @lines ) { s+lib/nagios+lib64/nagios+g; print; } close STDOUT;
KuKrApOk59
Messages postés
437
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
13 septembre 2013
84
9 avril 2010 à 16:43
9 avril 2010 à 16:43
Salut,
Effectivement, je n'avais pas pensé à faire comme cela
Je te remercie, et je vais essayer ça :D
Effectivement, je n'avais pas pensé à faire comme cela
Je te remercie, et je vais essayer ça :D
KuKrApOk59
Messages postés
437
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
13 septembre 2013
84
15 avril 2010 à 13:22
15 avril 2010 à 13:22
Je viens d'essayer et ça fonctionne parfaitement !
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
Modifié par lami20j le 15/04/2010 à 14:05
Modifié par lami20j le 15/04/2010 à 14:05
Salut,
Tu peux aussi utiliser -i dans on script et modifier sur place, aussi faire une sauvegarde de l'original au cas où
Voici un exemple
GNU/Linux:Linux is Not Ubuntu! Quel linux choisir ne veut pas dire votre Distribution préférée,
106485010510997108
Tu peux aussi utiliser -i dans on script et modifier sur place, aussi faire une sauvegarde de l'original au cas où
Voici un exemple
~ $ cat fic lib/nagios ~ $ cat fic.pl #!/usr/bin/perl -i.orig use strict;use warnings; my $file = "fic"; @ARGV=($file); while(<>){ s+lib/nagios+lib64/nagios+g; print; } __END__ ~ $ perl fic.pl ~ $ cat fic lib64/nagios ~ $ cat fic.orig lib/nagios
GNU/Linux:Linux is Not Ubuntu! Quel linux choisir ne veut pas dire votre Distribution préférée,
106485010510997108
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
15 avril 2010 à 14:13
15 avril 2010 à 14:13
hello
une question
est-ce qu'au milieu d'un code perl je peux avoir l'équivalent de l'option -i pour 1 fichier sans faire un open / close ?
une question
est-ce qu'au milieu d'un code perl je peux avoir l'équivalent de l'option -i pour 1 fichier sans faire un open / close ?
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
15 avril 2010 à 15:22
15 avril 2010 à 15:22
Salut,
Normalemnet l'option -i est passé aux interpreteur dans ligne shebang
Maintenant en fonctionne de ce qu'on veux faire, il doit avoir plusieurs possibilités de le faire.
As-tu un cas précis, pour que je comprenne mieux? ;-)
Normalemnet l'option -i est passé aux interpreteur dans ligne shebang
Maintenant en fonctionne de ce qu'on veux faire, il doit avoir plusieurs possibilités de le faire.
As-tu un cas précis, pour que je comprenne mieux? ;-)
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
15 avril 2010 à 15:29
15 avril 2010 à 15:29
c'était la question du post 1, comment éditer un seul fichier dans un code perl.
puisque je pense que si j'utilise l'option -i, elle va s'appliquer à tout les fichiers
puisque je pense que si j'utilise l'option -i, elle va s'appliquer à tout les fichiers
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
15 avril 2010 à 15:36
15 avril 2010 à 15:36
elle va s'appliquer à tout les fichiers
S'il s'agit de plusieurs fichiers, oui la modification sera faite à tous les fichiers.
Toutefois, on peut contrôler ça et faire un next dans la boucle pour sauter le fichier où on ne veux pas faire les modifications si jamais la chaine existe.
En même temps si la chaîne n'existe pas alors rien ne sera modifier.
S'il s'agit de plusieurs fichiers, oui la modification sera faite à tous les fichiers.
Toutefois, on peut contrôler ça et faire un next dans la boucle pour sauter le fichier où on ne veux pas faire les modifications si jamais la chaine existe.
En même temps si la chaîne n'existe pas alors rien ne sera modifier.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
KuKrApOk59
Messages postés
437
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
13 septembre 2013
84
15 avril 2010 à 14:42
15 avril 2010 à 14:42
Juste pour bien comprendre et apprendre (c'est bien aussi :))
Qu'est ce qui est implicitement passé ici :
Merci d'éclairer ma lanterne !
Qu'est ce qui est implicitement passé ici :
while(<???>){ s+lib/nagios+lib64/nagios+g; print; }
Merci d'éclairer ma lanterne !
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
Modifié par lami20j le 15/04/2010 à 15:26
Modifié par lami20j le 15/04/2010 à 15:26
Re,
Pour mieux comprendre (source Opérateurs d'E/S )
Le filehandle vide <> est spécial et peut être utiliser pour émuler le comportement de sed et de awk. L'entrée de <> provient soit de l'entrée standard soit de tous les fichiers listés sur la ligne de commande. Voici comment ça marche : la première fois que <> est évalué, on teste le tableau @ARGV et s'il est vide alors $ARGV[0] est positionné à ''-'' qui lorsqu'il sera ouvert lira l'entrée standard. Puis le tableau @ARGV est traité comme une liste de nom de fichiers. La boucle :
while (<>) {
... # code pour chaque ligne
}
est équivalent au pseudo-code Perl suivant :
sauf qu'il est moins volumineux et qu'il marche réellement. Il décale vraiment le tableau @ARGV et stocke le nom du fichier courant dans la variable $ARGV. Il utilise aussi en interne le filehandle ARGV -- <> est simplement un synonyme de <ARGV> qui est magique. (Le pseudo-code précédent ne fonctionne pas car il tient pas compte de l'aspect magique de <ARGV>.)
Pour mieux comprendre (source Opérateurs d'E/S )
Le filehandle vide <> est spécial et peut être utiliser pour émuler le comportement de sed et de awk. L'entrée de <> provient soit de l'entrée standard soit de tous les fichiers listés sur la ligne de commande. Voici comment ça marche : la première fois que <> est évalué, on teste le tableau @ARGV et s'il est vide alors $ARGV[0] est positionné à ''-'' qui lorsqu'il sera ouvert lira l'entrée standard. Puis le tableau @ARGV est traité comme une liste de nom de fichiers. La boucle :
while (<>) {
... # code pour chaque ligne
}
est équivalent au pseudo-code Perl suivant :
unshift(@ARGV, '-') unless @ARGV; while ($ARGV = shift) { open(ARGV, $ARGV); while (<ARGV>) { ... # code pour chaque ligne } }
sauf qu'il est moins volumineux et qu'il marche réellement. Il décale vraiment le tableau @ARGV et stocke le nom du fichier courant dans la variable $ARGV. Il utilise aussi en interne le filehandle ARGV -- <> est simplement un synonyme de <ARGV> qui est magique. (Le pseudo-code précédent ne fonctionne pas car il tient pas compte de l'aspect magique de <ARGV>.)
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
15 avril 2010 à 15:16
15 avril 2010 à 15:16
on boucle sur chaque ligne du fichier passé en paramètre ou du standard input
KuKrApOk59
Messages postés
437
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
13 septembre 2013
84
15 avril 2010 à 16:03
15 avril 2010 à 16:03
C'est effectivement un peu plus clair pour <>
Il faut que je creuse le sujet, y'a de quoi faire d'après ce que je lis là dessus
Pour la passage de -i dans la ligne shebang, cela ne pose pas de souci (pour mon cas), il n'y a qu'un fichier à modifier
Merci à vous
Il faut que je creuse le sujet, y'a de quoi faire d'après ce que je lis là dessus
Pour la passage de -i dans la ligne shebang, cela ne pose pas de souci (pour mon cas), il n'y a qu'un fichier à modifier
Merci à vous