PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Forums Hébergement > Forum Serveur - Sécurité et techniques > fr.comp.os.linux.config > Remplacer un texte dans une liste de fichiers
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
fr.comp.os.linux.config Prise en main d'un système Linux.

Remplacer un texte dans une liste de fichiers

Réponse
 
LinkBack Outils de la discussion
Vieux 04/09/2007, 23h27   #1
Lorand
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Remplacer un texte dans une liste de fichiers

Bonjour à tous,

Je sais remplacer un texte par un autre dans un fichier donné :

sed -n -i 's/ancien texte/nouveau texte/g' fichier.txt

Mais je ne sais pas remplacer "ancien texte" par "nouveau texte" dans une
liste de fichiers à extension donnée dans un répertoire donné.

Avez vous une idée ?
Une piste ?
Une commande ?

Par avance merci.
  Réponse avec citation
Vieux 04/09/2007, 23h33   #2
Patrick Lamaizière
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Remplacer un texte dans une liste de fichiers

Lorand wrote:

> Je sais remplacer un texte par un autre dans un fichier donné :
>
> sed -n -i 's/ancien texte/nouveau texte/g' fichier.txt
>
> Mais je ne sais pas remplacer "ancien texte" par "nouveau texte" dans une
> liste de fichiers à extension donnée dans un répertoire donné.
>
> Avez vous une idée ?
> Une piste ?
> Une commande ?


Tu as find avec l'option -exec, éventuellement xargs et sûrement d'autres
trucs !
  Réponse avec citation
Vieux 04/09/2007, 23h52   #3
Luc Habert
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Remplacer un texte dans une liste de fichiers

Lorand :

> Je sais remplacer un texte par un autre dans un fichier donné :
>
> sed -n -i 's/ancien texte/nouveau texte/g' fichier.txt


Euh, non, pas de «-n».

> Mais je ne sais pas remplacer "ancien texte" par "nouveau texte" dans une
> liste de fichiers à extension donnée dans un répertoire donné.


sed -n -i 's/ancien texte/nouveau texte/g' répertoire/*.extension
  Réponse avec citation
Vieux 04/09/2007, 23h52   #4
Luc Habert
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Remplacer un texte dans une liste de fichiers

Lorand :

> Je sais remplacer un texte par un autre dans un fichier donné :
>
> sed -n -i 's/ancien texte/nouveau texte/g' fichier.txt


Euh, non, pas de «-n».

> Mais je ne sais pas remplacer "ancien texte" par "nouveau texte" dans une
> liste de fichiers à extension donnée dans un répertoire donné.


sed -i 's/ancien texte/nouveau texte/g' répertoire/*.extension

  Réponse avec citation
Vieux 05/09/2007, 00h00   #5
Lorand
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Remplacer un texte dans une liste de fichiers

Le Tue, 04 Sep 2007 22:52:34 +0000, Luc Habert a écrit:

>> Mais je ne sais pas remplacer "ancien texte" par "nouveau texte" dans une
>> liste de fichiers à extension donnée dans un répertoire donné.

>
> sed -i 's/ancien texte/nouveau texte/g' répertoire/*.extension


effectivement, ça marche et c'est simplissime ...

j'étais parti sur cette piste

ls -d répertoire/*.extension | sed -i 's/ancien texte/nouveau texte/g'

mais j'arrive pas à récupérer dans le pipe la ligne à filer au sed

quelqu'un peut compléter ?
  Réponse avec citation
Vieux 05/09/2007, 00h39   #6
Luc Habert
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Remplacer un texte dans une liste de fichiers

Lorand :

> ls -d répertoire/*.extension | sed -i 's/ancien texte/nouveau texte/g'
>
> mais j'arrive pas à récupérer dans le pipe la ligne à filer au sed
>
> quelqu'un peut compléter ?


Ça serait:

ls -d répertoire/*.extension | xargs sed -i 's/ancien texte/nouveau texte/g'

.. xargs lit une liste de fichiers sur son entrée standard, et exécute la
commande qui lui est passée en argument avec les noms de fichiers comme
arguments. Mais ceci est une horreur, pour plein de raisons:
- si un nom de fichier contient un retour à la ligne, ou même un espace,
xargs va le découper
- ton shell commence par faire tout le boulot (remplacer le motif
«répertoire*.extension» par la liste des fichiers), puis ls ne fait rien
d'autre que les réécrire, pour les fourer à xargs qui enfin les retransmet à
sed, plein d'étapes intermédiaires qui ne font rien du tout.

Tu pouvais aussi faire:

for f in répertoire/*.extension; do
sed -i 's/ancien texte/nouveau texte/g "$f"
done

, la différence avec la méthode que je t'ai donnée étant que là, il y a un
sed exécuté pour chaque fichier,
  Réponse avec citation
Vieux 05/09/2007, 06h01   #7
dominique
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Remplacer un texte dans une liste de fichiers

Luc Habert a écrit :
>
> sed -i 's/ancien texte/nouveau texte/g "$f"
> done


Ne manquerait-il pas la quotte fermante en réponse à l'ouvrante de « sed
-i 's... » ?
Dominique
qui aimerait bin écrire des scripts mais qui sait point :-)
  Réponse avec citation
Vieux 05/09/2007, 08h28   #8
Lorand
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Remplacer un texte dans une liste de fichiers

Le Tue, 04 Sep 2007 23:39:13 +0000, Luc Habert a écrit:

[snip]

Merci pour cette réponse qui sera utilisée et sauvegardée.
  Réponse avec citation
Vieux 05/09/2007, 10h30   #9
Ph. Ivaldi
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Remplacer un texte dans une liste de fichiers

Le 05 septembre 2007, Luc.Habert.00__arjf@normalesup.org (Luc Habert)écrivit :

> ls -d répertoire/*.extension | xargs sed -i 's/ancien texte/nouveau
> texte/g'


Dans mon "howto_bash" j'ai:
8<------8<------8<------8<------8<------8<------8<------8<------8<------
Comment remplacer une chaine dans plusieurs fichiers
replace chaine tochaine -- files
ou
find ./ -maxdepth profondeur -name "regexp" -exec replace chaine tochaine -- {} \;
8<------8<------8<------8<------8<------8<------8<------8<------8<------

J'ai maintenant une troisième solution.
--
Philippe Ivaldi.
http://piprim.tuxfamily.org/
  Réponse avec citation
Vieux 05/09/2007, 11h55   #10
Luc Habert
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Remplacer un texte dans une liste de fichiers

dominique :

> Ne manquerait-il pas la quotte fermante en réponse à l'ouvrante de « sed
> -i 's... » ?


Effectivement, merci d'avoir corrigé. J'ai programmé l'éditeur de ligne de
zsh pour insérer le délimiteur fermant quand je tape le délimiteur ouvrant,
donc je n'ai pas l'habitude de fermer les délimiteurs. Dans mon éditeur, je
le fais aussi, mais seulement pour les délimiteurs courants (parenthèses,
accolades, crochets, guillemets, double quote), et non pour les quotes ou
les backquotes, résultat, des fois, je me plante.
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 13h43.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,14356 seconds with 18 queries