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

Comment appliquer un s/foo/bar/g sur tout les fichiers d'un répertoire et ses sous répertoires ?

6 réponses
Avatar
KLEIN Stéphane
Bonjour,

j'aimerais appliquer un s/foo/bar/g sur tout les fichiers d'un
r=E9pertoire et ses sous r=E9pertoires ?

J'ai bien trouv=E9 des manuels pour "sed" :

http://users.cybercity.dk/~bse26236/batutil/help/SED.HTM
http://sed.sourceforge.net/sed1line_fr.html
http://www.ptug.org/sed/sedfaq.htm

mais =E0 chaque fois les commandes s'appliquent sur un fichier. Je
suppose qu'il faut utiliser un "find" entre ` ` mais je ne sais pas
exactement l'art et la mani=E8re de le faire.

Merci d'avance pour votre aide.
St=E9phane

6 réponses

Avatar
KLEIN Stéphane
2006/9/29, KLEIN Stéphane :
Bonjour,

j'aimerais appliquer un s/foo/bar/g sur tout les fichiers d'un
répertoire et ses sous répertoires ?

J'ai bien trouvé des manuels pour "sed" :

http://users.cybercity.dk/~bse26236/batutil/help/SED.HTM
http://sed.sourceforge.net/sed1line_fr.html
http://www.ptug.org/sed/sedfaq.htm

mais à chaque fois les commandes s'appliquent sur un fichier. Je
suppose qu'il faut utiliser un "find" entre ` ` mais je ne sais pas
exactement l'art et la manière de le faire.



à cette adresse http://www.abrillant.com/doc/linux/index.html j'ai trouv é ceci :

b. Search and replace a MOTIF in all file from the current directory

# Be careful with such command
# It creates a temporary file with the good motif and
# replace the old file by this one.
# It is really dangerous to use the same stream for reading and writing
# That's why the temporary file is used

for file in $(find . -type f); do
sed 's/OLDMOTIF/NEWMOTIF/g' < $file > $file.tmp
rm -f $file
mv $file.tmp $file
done

Cependant, je ne sais pas si il y a plus court en une seule ligne.
Avatar
Dominique Goncalves
Bonjour,

On 9/29/06, KLEIN Stéphane wrote:
2006/9/29, KLEIN Stéphane :
> Bonjour,
>
> j'aimerais appliquer un s/foo/bar/g sur tout les fichiers d'un
> répertoire et ses sous répertoires ?
>
> J'ai bien trouvé des manuels pour "sed" :
>
> http://users.cybercity.dk/~bse26236/batutil/help/SED.HTM
> http://sed.sourceforge.net/sed1line_fr.html
> http://www.ptug.org/sed/sedfaq.htm
>
> mais à chaque fois les commandes s'appliquent sur un fichier. Je
> suppose qu'il faut utiliser un "find" entre ` ` mais je ne sais pas
> exactement l'art et la manière de le faire.

à cette adresse http://www.abrillant.com/doc/linux/index.html j'ai trou vé ceci :

b. Search and replace a MOTIF in all file from the current directory

# Be careful with such command
# It creates a temporary file with the good motif and
# replace the old file by this one.
# It is really dangerous to use the same stream for reading and writing
# That's why the temporary file is used

for file in $(find . -type f); do
sed 's/OLDMOTIF/NEWMOTIF/g' < $file > $file.tmp
rm -f $file
mv $file.tmp $file
done

Cependant, je ne sais pas si il y a plus court en une seule ligne.



Je viens d'essayer ça, la différence avec ta commade, c'est qu'il n'y
a pas de backup temporaire (option -i de sed)

find . -type f | xargs sed -i "" -e 's|test|bidule|g'

HTH

--
There's this old saying: "Give a man a fish, feed him for a day. Teach
a man to fish, feed him for life."
Avatar
Daniel Caillibaud
Dominique Goncalves a écrit :
Je viens d'essayer ça, la différence avec ta commade, c'est qu'il n'y
a pas de backup temporaire (option -i de sed)

find . -type f | xargs sed -i "" -e 's|test|bidule|g'



Tu peux faire directement
find . -type f | xargs sed -ie 's|test|bidule|g'

Mais attention à l'expression, comme tu le disais, il n'y a pas de backup...

Daniel


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Marc Chantreux
salut,

avec zsh :

sed -ie 's|test|bidule|g' **/*(.)

cordialement,
mc


--
téléphone : 03.90.24.00.19
courriel :
---------------------------------------
Avatar
Jacques L'helgoualc'h
Marc Chantreux a écrit, dimanche 1 octobre 2006, à 10:18 :
salut,



aussi.

avec zsh :

sed -ie 's|test|bidule|g' **/*(.)



Heu, ça va créer des sauvegardes avec un « e » final ?

sed -i -e ...

ou

sed -i.old -e ...

--
Jacques L'helgoualc'h


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Vincent Lefevre
On 2006-10-01 10:18:01 +0200, Marc Chantreux wrote:
avec zsh :

sed -ie 's|test|bidule|g' **/*(.)



Mais s'il y a beaucoup de fichiers, ça va échouer. Il faut alors
utiliser zargs.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact