Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/08/2006, à 11:16

xbright

[résolu] Remplacement de textes à la volée

Bonjour,

J'ai une dizaine de fichiers .php qui contiennent, entre autre, un texte du genre : "machin.truc". Je voudrais remplacer toutes les occurences de "machin.truc" en "machin.chose".
Je ne peux pas le faire à la main car ça me prendrait trop de temps et puis je pourrai en oublier.. roll

Donc, connaissez vous quelque chose qui pourrait remplacer ces textes sur plusieurs fichiers ??

Dernière modification par xbright (Le 12/08/2006, à 18:14)


| tagada  | CodingTeam | Ubuntu Réunion | Linux Facile | Mon blog |
Rien à faire ! Moi, je préfère les fraises.

Hors ligne

#2 Le 12/08/2006, à 11:28

calimarno

Re : [résolu] Remplacement de textes à la volée

Salut xbright,

Ben en général la fonction remplacer de n'importe quel éditeur de texte (Gedit, Kwrite) le fera!


Les Chroniques de Calimarno -- Swisslinux.org
"Alors que tous les autres ont des problèmes, les chimistes ont des solutions!" :D
----
Pour passer un sujet en [Résolu], il suffit que l'auteur du premier message du sujet modifie le titre en cliquant sur "Modifier".

Hors ligne

#3 Le 12/08/2006, à 11:36

xbright

Re : [résolu] Remplacement de textes à la volée

Oui, y a la fonction Remplacer de mon BlueFish mais elle ne le fait que dans un seul fichier.. A la limite je peux le faire, mais c'est lourd big_smile


| tagada  | CodingTeam | Ubuntu Réunion | Linux Facile | Mon blog |
Rien à faire ! Moi, je préfère les fraises.

Hors ligne

#4 Le 12/08/2006, à 11:48

jr95

Re : [résolu] Remplacement de textes à la volée

Bonjour,

C'est faisable avec quelques lignes de script bash du style

LISTEFIC="fic1 fic2 fic3"
for f in $LISTEFIC
do
    sed -e 's/machin.truc/machin.chose/g' $f > $f.temp
    mv $f.temp $f
done

Hors ligne

#5 Le 12/08/2006, à 12:00

xbright

Re : [résolu] Remplacement de textes à la volée

Cool merci, je vais tester big_smile

EDIT : j'en demande un peu trop, mais, serait il possible de lister tous les fichiers .php du répertoire plutôt que d'entrer leur non un à un ? hmm

Dernière modification par xbright (Le 12/08/2006, à 12:06)


| tagada  | CodingTeam | Ubuntu Réunion | Linux Facile | Mon blog |
Rien à faire ! Moi, je préfère les fraises.

Hors ligne

#6 Le 12/08/2006, à 12:32

Black_pignouf

Re : [résolu] Remplacement de textes à la volée

Salut!

for f in `ls -1 *.php`
do
    sed -ie 's/machin.truc/machin.chose/g' $f
done

Mais fait bien une copie de sauvegarde avant de tenter quoi que ce soit, tu aurais tôt fait de faire de grosses bêtises et de perdre des informations!

Si besoin est, tu peux lancer:

for f in `ls -1 *.php`
do
    sed -i.bak -e 's/machin.truc/machin.chose/g' $f
done

qui fera une copie de sauvegarde en .bak pour chaque fichier wink

Hors ligne

#7 Le 12/08/2006, à 18:13

xbright

Re : [résolu] Remplacement de textes à la volée

J'ai fait un petit test (j'ai pas trop eu le temps de faire ça avec mes bons fichiers). Ca marche très bien wink
Merci big_smile


| tagada  | CodingTeam | Ubuntu Réunion | Linux Facile | Mon blog |
Rien à faire ! Moi, je préfère les fraises.

Hors ligne

#8 Le 12/08/2006, à 20:28

jdloic

Re : [résolu] Remplacement de textes à la volée

jr95 a écrit :

Bonjour,

C'est faisable avec quelques lignes de script bash du style

LISTEFIC="fic1 fic2 fic3"
for f in $LISTEFIC
do
    sed -e 's/machin.truc/machin.chose/g' $f > $f.temp
    mv $f.temp $f
done

On peut aussi faire:
    sed -e -i 's/machin.truc/machin.chose/g' $f

Hors ligne

#9 Le 12/08/2006, à 20:37

xbright

Re : [résolu] Remplacement de textes à la volée

Cela revient au même que ce que m'a proposé Black_pignouf :

for f in `ls -1 *.php`
do
    sed -ie 's/machin.truc/machin.chose/g' $f
done

| tagada  | CodingTeam | Ubuntu Réunion | Linux Facile | Mon blog |
Rien à faire ! Moi, je préfère les fraises.

Hors ligne

#10 Le 12/08/2006, à 21:34

jdefaver

Re : [résolu] Remplacement de textes à la volée

on peut encore simplifier un peu :

for i in *.php; do sed -ie 's/machin.truc/machin.chose/g' $f; done

meme pas besoin de scripter, en fait smile

Hors ligne

#11 Le 12/08/2006, à 22:56

Black_pignouf

Re : [résolu] Remplacement de textes à la volée

roll pas besoin de scripter non plus avec

for f in `ls -1 *.php`
do
    sed -ie 's/machin.truc/machin.chose/g' $f
done

on peut très bien le taper tel quel dans la console ou le copier coller ainsi wink
Astuce: il faut taper Alt Gr+Entrée pour sauter une ligne sans exécuter

Hors ligne

#12 Le 13/08/2006, à 10:59

jdefaver

Re : [résolu] Remplacement de textes à la volée

ma ramarque etait plutot sur le

for f in `ls -1 *.php`

qui est inutilement compliqué puisque

for f in *.php

fonctionne tout aussi bien. Autant simplifier les commandes au max, non ?

Hors ligne

#13 Le 13/08/2006, à 11:05

Black_pignouf

Re : [résolu] Remplacement de textes à la volée

Tout à fait d'accord alors! wink
Je ne connaissais pas cette syntaxe d'ailleurs, merci pour le tuyau smile

Hors ligne

#14 Le 16/08/2006, à 12:09

TuRn3r

Re : [résolu] Remplacement de textes à la volée

D'ailleurs, pour rendre le script plus générique :

#!/bin/bash

while [ $1 ] ;do
    sed -ie 's/machin.truc/machin.chose/g' $1
    shift
done

Explications:
$1 -> pour prendre le premier argument
shift -> pour supprimer le premier argument et décale tout les autres

Puis, tu lances le script :
Pour tout les fichiers du repertoire
#>./script *

Pour tout les fichiers .php :
#>./script *.php

etc...

Voir meme

#!/bin/bash

while [ $3 ] ;do
    sed -ie 's/$1/$2/g' $3
    shift
done

Pour tout les fichiers du repertoire, remplace machin.truc par machin.chose
#>./script machin.truc machin.chose *

Pour tout les fichiers .php, remplace texte avec espace par textesansespace:
#>./script "texte avec espace" textesansespace *.php

#15 Le 16/08/2006, à 12:28

TuRn3r

Re : [résolu] Remplacement de textes à la volée

Enfin, plutot ca pour la 2eme version ::/

#!/bin/bash
string_search=$1
string_replace=$2

while [ $3 ] ;do
    sed -i "s/$string_search/$string_replace/g" $3
    shift
done