[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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



Bonjour,

On 9/29/06, KLEIN Stéphane <klein.stephane@gmail.com> wrote:
2006/9/29, KLEIN Stéphane <klein.stephane@gmail.com>:
> 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.

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."



Reply to: