Bonjour,
Je voudrais remplacer toutes les occurences d'une chaîne se trouvant dans un fichier par une autre chaîne.
Auriez vous des pistes à m'indiquer pour pouvoir réaliser cela? de tels fonctions existent-elles déjà?
Merci de vos éclaircissement.
# C'est complétement fait pour
Posté par Gart Algar . Évalué à 2.
ça, c'est un uniligne qui te le fait facilement.
Si tu veux le faire dans un programme plus classique, un truc du genre (vite fait, hein) :
#!/usr/bin/perl -w
my $source_file = "/mon/chemin/vers/monfichier";
open SOURCE, $source_file or die "can't open $source_file $!";
while (my $line=<SOURCE>) {
if($line =~ /contient ma chaîne/) {
print "found";
s/contient ma chaîne/truc de remplacement/g;
}
}
close(SOURCE);
Une bonne lecture, les articles de Linux magazine France : http://articles.mongueurs.net/magazines/
# sed ou vi
Posté par fremauxb . Évalué à 3.
* vi
* sed
Les deux demandent un petit apprentissage. Si c'est pour le faire une fois, je te conseille plutot vi. Si tu veux automatiser la manipulation, il va falloir te mettre à sed. Mais dans les deux cas, les expressions régulières te seront d'une grande utilité.
quand tu ouvres un fichier avec vi, il te suffit de tapper la commande
:1,$s/chainesource/chainedest/g
explication :
:1,$ parcourt le fichier de la première ligne à la dernière
s/chainesource/chainedest change chainesource en chainedest
/g applique la substitution à toutes les occurences
En ce qui concerne sed, n'étant pas un spécialiste, je te renvoies plutot au man ou au net.
[^] # Re: sed ou vi
Posté par Rin Jin (site web personnel) . Évalué à 2.
sed -e 's/ancien/nouveau/g' fichier
[^] # Re: sed ou vi
Posté par arn100 . Évalué à 1.
l'utilisation de sed me paraît impeccable! Cela m'évite beacoup de lignes de code...
Par contre si je souhaite que le fichier en question soit imédiatement modifier comment puis-je faire?
car, en fait, la commande suivante :
sed -e 's/ancien/nouveau/g' monfichier
me retourne en sortie standard le nouveau fichier (sans l'avoir écrit dans "monfichier")
si je fais :
sed -e 's/ancien/nouveau/g' monfichier > monfichier
alors il m'écrase ce dernier.... Il y aurait-il une astuce pour ne pas passer par un fichier temporaire et écrirre directement le fichier "monfichier" à la volée.
Enfin, c'est la cerise sur le gateau... car même sans cela je suis content d'avoir découvert cette fonction... merci encore
[^] # RTFM
Posté par Krunch (site web personnel) . Évalué à 3.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: RTFM
Posté par arn100 . Évalué à 1.
[^] # Re: sed ou vi
Posté par Pierre Mallard . Évalué à 2.
Ctl-Alt-% c'est encore mieux la ! :)
[^] # Re: sed ou vi
Posté par pasencoreinvite . Évalué à 1.
la première, c'est qu'il faut que la ligne commence par une séquence précise, la deuxième c'est que la séquence qui suit (la deuxième donc) ait plus d'un caractère .
Enfin, je voudrais pouvoir insérer un "_" entre chaque lettre de cette séquence(je voudrais faire ça dans tout le fichier). est-ce réalisable (je suppose que oui, mais comment es-ce qu'on peut spécifier tout ça avec sed?)
Merci!
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.