renommer un element dans un fichier

renommer un element dans un fichier - Perl - Programmation

Marsh Posté le 22-04-2008 à 13:37:29    

salut,
 
J'ai un fichier texte
qui contient ce mot

Citation :

DELTA


à plusieurs endroit,
je souhaiterais remplacer DELTA chaque fois que je le trouve par un autre element;
 
est ce possible avec un regex ?
 
Merci

Reply

Marsh Posté le 22-04-2008 à 13:37:29   

Reply

Marsh Posté le 22-04-2008 à 13:40:59    

perl -pi -e 's/DELTA/autremot/g;' fichier

Reply

Marsh Posté le 22-04-2008 à 14:53:33    

Si c'est pour le faire via une ligne de commande, je recommanderai plutôt un sed ( sauf si ton fichier est vraiment énorme).
 
Si c'est à mettre "au sein" d'un script, choppe la regex d'Elmoricq et place la sur le parcours de ton fichier.


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 22-04-2008 à 15:08:49    

J'aime pas sed, c'est lent et c'est tout pourrÿ, même si pour ce genre de tache faire appel à PERL c'est peut-être un peu de l'overkill :o

Reply

Marsh Posté le 22-04-2008 à 15:17:35    

j'ai fait un system je l'ai mis dedans mon script reste bloqué dessus je comprend pas,car quand je la lance directement dans mon shelle elle tourne
 

Citation :


system ("perl -pi -e 's/DELTA/TEST/g;' > ".$ENV{SCRIPTS}."/".$file);

Reply

Marsh Posté le 22-04-2008 à 15:19:08    

system() ?!
 
system() d'une commande PERL dans un script PERL ?
 
 
Euh, je... je... je... ne sais pas quoi dire, là. [:ummon]

Reply

Marsh Posté le 22-04-2008 à 15:20:49    

je crois avoir trouvé j 'ai rajouter ">" en plus

Reply

Marsh Posté le 22-04-2008 à 15:21:44    

je n'ai pas besoin du system , c'est cela ?*

Reply

Marsh Posté le 22-04-2008 à 16:04:58    

Elmoricq a écrit :

system() ?!
system() d'une commande PERL dans un script PERL ?
Euh, je... je... je... ne sais pas quoi dire, là. [:ummon]


 fallait se servir de sed [:hahaguy]

donny3 a écrit :

je crois avoir trouvé j 'ai rajouter ">" en plus


 [:kains]

donny3 a écrit :

je n'ai pas besoin du system , c'est cela ?*


Fais voir ton script ( ou au moins le morceau qui contient le "traitement" du fichier)

 


Message édité par anapajari le 22-04-2008 à 16:05:19

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 23-04-2008 à 12:44:12    

j'ai trouver cela mais pas encore tester
 

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. my $filename = 'some_file.txt';
  5. my $find = 'this';
  6. my $replace = 'that';
  7. {
  8.    local @ARGV = ($filename);
  9.    local $^I = '.bac';
  10.    while( <> ){
  11.       if( s/$find/$replace/ig ) {
  12.          print;
  13.       }
  14.       else {
  15.          print;
  16.       }
  17.    }
  18. }
  19. print "Finished";

Reply

Marsh Posté le 23-04-2008 à 12:44:12   

Reply

Marsh Posté le 23-04-2008 à 14:34:55    

oui donc là tu as trouvé un truc prêt qui est censé faire ce que tu veux ...


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 23-04-2008 à 15:19:46    

je n'ai pas trop compris à quoi servait ceci

Code :
  1. local $^I = '.bac';

Reply

Marsh Posté le 23-04-2008 à 15:21:16    

en faite il crée un .bac à chaque fois
je suis obligé de les supprimé à la fin

Reply

Marsh Posté le 23-04-2008 à 18:43:32    

local $^I = '.bac';
ca a comme effet  
1. de faire que les modifications aient lieu sur le fichier initial, "in place editing"
2. de creer automatiquement un fichier de backup avec l'extension .bac pour tout fichier utilise dans <>.  (perl ne fait pas d'in place editing sans faire un fichier de backup a priori, sauf a passer par un tie du fichier sur un array)
A+,


Message édité par gilou le 21-11-2008 à 21:07:03

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed