Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

replace dans fichier

15 réponses
Avatar
Mihamina (R12y) Rakotomandimby
Bonjour,

J'ai trouvé dans les divers tutoriaux comment on fait pour remplacer une
chaine par une autre.

Par contre, quelle est la méthode pour remplacer une chaine par une autre
dans un fichier? Est-ce qu'il faut
- ouvrir le fichier
- charger son contenu
- faire le remplacement,
ou bien y a-t-il un moyen plus "direct"?

Par plus "direct" j'entends ne fournir que le nom du fichier à transformer,
la chaine à remplacer, la chaine de remplacement (sans les étapes liées à
l'ouverture du fichier, donc).

Merci d'avance.

10 réponses

1 2
Avatar
Nicolas George
R12y wrote in message :
Par contre, quelle est la méthode pour remplacer une chaine par une autre
dans un fichier? Est-ce qu'il faut
- ouvrir le fichier
- charger son contenu
- faire le remplacement,
ou bien y a-t-il un moyen plus "direct"?


Regarde Tie::File.

Avatar
Stephane Chazelas
2007-06-26, 19:04(+02), Mihamina (R12y) Rakotomandimby:
[...]
J'ai trouvé dans les divers tutoriaux comment on fait pour remplacer une
chaine par une autre.

Par contre, quelle est la méthode pour remplacer une chaine par une autre
dans un fichier? Est-ce qu'il faut
- ouvrir le fichier
- charger son contenu
- faire le remplacement,
ou bien y a-t-il un moyen plus "direct"?

Par plus "direct" j'entends ne fournir que le nom du fichier à transformer,
la chaine à remplacer, la chaine de remplacement (sans les étapes liées à
l'ouverture du fichier, donc).
[...]


Voir les options -i et -p/-n de perl:

perl -pi -e 's/foo/bar/g' file1 file2...

voir perldoc perlrun

--
Stéphane

Avatar
Stephane Chazelas
2007-06-27, 00:44(+02), Mihamina (R12y) Rakotomandimby:
Stephane Chazelas - :

perl -pi -e 's/foo/bar/g' file1 file2...


Oui. Ca c'est en "one-liner" à partir du prompt shell.
Moi c'est dans un script que cherche à le faire, maintenant.


#! /usr/bin/perl -pi
s/foo/bar/g;

Sinon, perldoc perlrun

--
Stéphane


Avatar
Mihamina (R12y) Rakotomandimby
Stephane Chazelas - :

perl -pi -e 's/foo/bar/g' file1 file2...


Oui. Ca c'est en "one-liner" à partir du prompt shell.
Moi c'est dans un script que cherche à le faire, maintenant.

Avatar
dominix
Stephane Chazelas - :

perl -pi -e 's/foo/bar/g' file1 file2...


Oui. Ca c'est en "one-liner" à partir du prompt shell.
Moi c'est dans un script que cherche à le faire, maintenant.


un script complet tout en perl ?
en voila un :
$ perl -MOÞparse -pi -e 's/foo/bar/g'


--
dominix


Avatar
Patrice Karatchentzeff
"Mihamina (R12y) Rakotomandimby" a écrit :

Stephane Chazelas - :

perl -pi -e 's/foo/bar/g' file1 file2...


Oui. Ca c'est en "one-liner" à partir du prompt shell.
Moi c'est dans un script que cherche à le faire, maintenant.


1) tu peux mettre un one-line dans un script :)
2) perlrun 't'indique ce que font ces options donc, à la limite,
tu n'as juste qu'à faire un copier-coller...

Mais à ta place, j'apprendrai Perl en achetant un bouquin ou en lisant
une doc...

PK

--
      |      _,,,---,,_       Patrice KARATCHENTZEFF
ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:
     |,4-  ) )-,_. , (  `'-'  http://p.karatchentzeff.free.fr
    '---''(_/--'  `-'_)       


Avatar
Paul Gaborit
À (at) Wed, 27 Jun 2007 00:44:52 +0200,
"Mihamina (R12y) Rakotomandimby" écriva it (wrote):
Moi c'est dans un script que cherche à le faire, maintenant.


Un one-liner est pratique car concis et rapide à écrire mais, en cas
d'erreur, il ne gère rien. Mais comme le programmeur (qui est aussi
l'utilisateur) est là, ce n'est pas un problème.

Dans un script, il vaut mieux gérer les choses le plus proprement
possible : faites une petite fonction pour faire ce que vous
voulez. En pensant a tous les cas "tordus" : que fait-on si le fichier
n'existe pas ? si on n'a pas les droits pour l'ouvrir ? s'il n'y a
plus de place sur le disque ? etc. Pensez aussi aux cas où la chaîne
contient des caractères spéciaux (pour les regexp) ou des passages à
la ligne.

L'utilisateur futur et le programmeur qui, plus tard, devra déboguer
vous en remercieront !

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
kurtz le pirate
In article ,
"Mihamina (R12y) Rakotomandimby"
wrote:

Bonjour,

J'ai trouvé dans les divers tutoriaux comment on fait pour remplacer une
chaine par une autre.

Par contre, quelle est la méthode pour remplacer une chaine par une autre
dans un fichier? Est-ce qu'il faut
- ouvrir le fichier
- charger son contenu
- faire le remplacement,
ou bien y a-t-il un moyen plus "direct"?


ce que moi je fais couramment :

- j'ouvre le fichier 'source'
- je fais mes remplacements
- j'écris le résultat dans 'temp'
- suivant les traitements :
- je renomme : source -> source.old et le temp -> source
- je renome temp en source et j'efface l'original



mais ne pas oublier : TIMTOWTDI :)

--
klp

Avatar
GLudovic66000
On 27 juin, 19:57, kurtz le pirate wrote:
In article ,
"Mihamina (R12y) Rakotomandimby"

wrote:
Bonjour,

J'ai trouvé dans les divers tutoriaux comment on fait pour remplacer une
chaine par une autre.

Par contre, quelle est la méthode pour remplacer une chaine par une a utre
dans un fichier? Est-ce qu'il faut
- ouvrir le fichier
- charger son contenu
- faire le remplacement,
ou bien y a-t-il un moyen plus "direct"?


ce que moi je fais couramment :

- j'ouvre le fichier 'source'
- je fais mes remplacements
- j'écris le résultat dans 'temp'
- suivant les traitements :
- je renomme : source -> source.old et le temp -> source
- je renome temp en source et j'efface l'original

mais ne pas oublier : TIMTOWTDI :)

--
klp


au risque d'être un peu HS, il existe gsar qui remplace un texte dans
un fichier. C'est l'équivalent de grep pour le remplacement. On peut
appeler gsar depuis perl, du genre system.

Ludo66000


Avatar
Mihamina (R12y) Rakotomandimby
GLudovic66000 - :

C'est l'équivalent de grep pour le remplacement


grep remplace?

1 2