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 ?
Luc.Habert.00__arjf
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,
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,
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,
dominique
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 :-)
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 :-)
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 :-)
Lorand
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.
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.
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.
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.
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.