Je cherche à remplacer des chaines de caractères au sein de plusieurs
fichiers. Mais ca me lourde de les ouvrir un à un pour les faire.
J'ai donc pensé à faire une boucle en script bash sur les fichiers de
mon répertoire, mais je cherche encore un utilitaire me permettant de
remplacer des chaines de texte à la volée.
Par exemple, dans un fichier donné, remplacer toutes les occurences de
"titi" par "tata".
Y-a-til un programme en ligne de commande qui permet de faire cela ?
( Genre $remplace --chaine1 "titi" -chaine2 "tata" )
On Tue, 16 Sep 2003 13:11:11 -0400 Christophe PEREZ wrote:
En plus clair, comment faire pour remplacer des données dans un fichier, par sed, et remettant les nouvelles données dans le même fichier (sans passer par un fichier intermédiaire pour ne pas perdre les permission) avec _ce_ principe du ": > monFichier" ?
Visiblement ton problème est que tu ne lis pas ce qui est écrit. Jérémy JUST ne propose pas la commande : cat mon_fichier | sed 's/titi/tata/g' > mon_fichier
Mais il la cité du message de Thomas Houssin afin de dire pourquoi elle est mauvaise. Et il explique qu'elle est mauvaise car elle est équivalente à la commande : : > nomFichier
Et cette commde : > nomFichier est mauvaise car elle ne fait qu'écraser le fichier.
On Fri, 29 Aug 2003 22:39:03 +0200 Jérémy JUST wrote:
L'utilisation de Perl avec l'option`-i' ("in place") paraît bien adaptée (peut-être est-ce aussi possible avec sed?).
La seul solution proposé est l'option -i en perl à toi de te satisfaire de cela ou de cherche s'il existe une option équivalente pour sed visiblement aucun pro de sed ne s'est manifesté dans ce sens.
En plus clair, comment faire pour remplacer des données dans un
fichier, par sed, et remettant les nouvelles données dans le même
fichier (sans passer par un fichier intermédiaire pour ne pas perdre
les permission) avec _ce_ principe du ": > monFichier" ?
Visiblement ton problème est que tu ne lis pas ce qui est écrit. Jérémy
JUST ne propose pas la commande :
cat mon_fichier | sed 's/titi/tata/g' > mon_fichier
Mais il la cité du message de Thomas Houssin afin de dire pourquoi elle
est mauvaise. Et il explique qu'elle est mauvaise car elle est
équivalente à la commande :
: > nomFichier
Et cette commde : > nomFichier est mauvaise car elle ne fait qu'écraser
le fichier.
On Fri, 29 Aug 2003 22:39:03 +0200
Jérémy JUST <jeremy_just@netcourrier.com> wrote:
L'utilisation de Perl avec l'option`-i' ("in place") paraît bien
adaptée (peut-être est-ce aussi possible avec sed?).
La seul solution proposé est l'option -i en perl à toi de te satisfaire
de cela ou de cherche s'il existe une option équivalente pour sed
visiblement aucun pro de sed ne s'est manifesté dans ce sens.
On Tue, 16 Sep 2003 13:11:11 -0400 Christophe PEREZ wrote:
En plus clair, comment faire pour remplacer des données dans un fichier, par sed, et remettant les nouvelles données dans le même fichier (sans passer par un fichier intermédiaire pour ne pas perdre les permission) avec _ce_ principe du ": > monFichier" ?
Visiblement ton problème est que tu ne lis pas ce qui est écrit. Jérémy JUST ne propose pas la commande : cat mon_fichier | sed 's/titi/tata/g' > mon_fichier
Mais il la cité du message de Thomas Houssin afin de dire pourquoi elle est mauvaise. Et il explique qu'elle est mauvaise car elle est équivalente à la commande : : > nomFichier
Et cette commde : > nomFichier est mauvaise car elle ne fait qu'écraser le fichier.
On Fri, 29 Aug 2003 22:39:03 +0200 Jérémy JUST wrote:
L'utilisation de Perl avec l'option`-i' ("in place") paraît bien adaptée (peut-être est-ce aussi possible avec sed?).
La seul solution proposé est l'option -i en perl à toi de te satisfaire de cela ou de cherche s'il existe une option équivalente pour sed visiblement aucun pro de sed ne s'est manifesté dans ce sens.
A+,
Bibiche.
Christophe PEREZ
Le Wed, 17 Sep 2003 00:55:12 +0200, Bibiche a écrit:
Mais il la cité du message de Thomas Houssin afin de dire pourquoi elle est mauvaise. Et il explique qu'elle est mauvaise car elle est équivalente à la commande : : > nomFichier
Ah ! Ce n'est pas que je ne lis pas, mais effectivement, j'avais mal interprété et cru que ça solutionnait le problème.
La seul solution proposé est l'option -i en perl à toi de te satisfaire
Non, c'était uniquement l'objectif sed qui m'intéressait.
de cela ou de cherche s'il existe une option équivalente pour sed
Déjà cherché justement, mais je pouvais ne pas avoir tout compris, surtout quand j'ai lu récemment quelque chose du même genre (mais je ne sais plus où, en tout cas, ce n'était pas sed) qui traite la totalité du fichier, et n'envoie la sortie qu'après, justement afin de ne pas avoir ce problème d'écrasement. .
visiblement aucun pro de sed ne s'est manifesté dans ce sens.
Ok. Désolé pour toutes mes incompréhensions.
-- Christophe PEREZ
Le Wed, 17 Sep 2003 00:55:12 +0200, Bibiche a écrit:
Mais il la cité du message de Thomas Houssin afin de dire pourquoi elle
est mauvaise. Et il explique qu'elle est mauvaise car elle est
équivalente à la commande :
: > nomFichier
Ah !
Ce n'est pas que je ne lis pas, mais effectivement, j'avais mal
interprété et cru que ça solutionnait le problème.
La seul solution proposé est l'option -i en perl à toi de te satisfaire
Non, c'était uniquement l'objectif sed qui m'intéressait.
de cela ou de cherche s'il existe une option équivalente pour sed
Déjà cherché justement, mais je pouvais ne pas avoir tout compris, surtout
quand j'ai lu récemment quelque chose du même genre (mais je ne sais plus
où, en tout cas, ce n'était pas sed) qui traite la totalité du fichier, et
n'envoie la sortie qu'après, justement afin de ne pas avoir ce problème
d'écrasement. .
visiblement aucun pro de sed ne s'est manifesté dans ce sens.
Le Wed, 17 Sep 2003 00:55:12 +0200, Bibiche a écrit:
Mais il la cité du message de Thomas Houssin afin de dire pourquoi elle est mauvaise. Et il explique qu'elle est mauvaise car elle est équivalente à la commande : : > nomFichier
Ah ! Ce n'est pas que je ne lis pas, mais effectivement, j'avais mal interprété et cru que ça solutionnait le problème.
La seul solution proposé est l'option -i en perl à toi de te satisfaire
Non, c'était uniquement l'objectif sed qui m'intéressait.
de cela ou de cherche s'il existe une option équivalente pour sed
Déjà cherché justement, mais je pouvais ne pas avoir tout compris, surtout quand j'ai lu récemment quelque chose du même genre (mais je ne sais plus où, en tout cas, ce n'était pas sed) qui traite la totalité du fichier, et n'envoie la sortie qu'après, justement afin de ne pas avoir ce problème d'écrasement. .
visiblement aucun pro de sed ne s'est manifesté dans ce sens.
Ok. Désolé pour toutes mes incompréhensions.
-- Christophe PEREZ
Bibiche
Lu,
On Tue, 16 Sep 2003 19:32:03 -0400 Christophe PEREZ wrote:
Non, c'était uniquement l'objectif sed qui m'intéressait.
Déjà cherché justement, mais je pouvais ne pas avoir tout compris, surtout quand j'ai lu récemment quelque chose du même genre (mais je ne sais plus où, en tout cas, ce n'était pas sed) qui traite la totalité du fichier, et n'envoie la sortie qu'après, justement afin de ne pas avoir ce problème d'écrasement. .
visiblement aucun pro de sed ne s'est manifesté dans ce sens.
N'ayant jamais utilisé sed, j'ai pris mon man et ooohh que vois-je... SYNOPSIS sed [OPTION]... {script-only-if-no-other-script} [input-file]...
Là déjà je me pose une question, pourquoi se faire chier avec un « cat nomFichier | » alors qu'il suffit de donner le nom du fichier en paramètre ?!
-i[suffix], --in-place[=suffix] edit files in place (makes backup if extension supplied)
Ca serait-y pas l'option recherchée ?!
Du coup « cat mon fichier | sed 's/titi/tata/g' > mon_fichier » devient : sed -i 's/titi/tata/g' mon_fichier
Décidement faut vraiment se mettre à lire le man... et à bien l'interpréter ;-)
Non, c'était uniquement l'objectif sed qui m'intéressait.
Déjà cherché justement, mais je pouvais ne pas avoir tout compris,
surtout quand j'ai lu récemment quelque chose du même genre (mais je
ne sais plus où, en tout cas, ce n'était pas sed) qui traite la
totalité du fichier, et n'envoie la sortie qu'après, justement afin de
ne pas avoir ce problème d'écrasement. .
visiblement aucun pro de sed ne s'est manifesté dans ce sens.
N'ayant jamais utilisé sed, j'ai pris mon man et ooohh que vois-je...
SYNOPSIS
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
Là déjà je me pose une question, pourquoi se faire chier avec un « cat
nomFichier | » alors qu'il suffit de donner le nom du fichier en
paramètre ?!
-i[suffix], --in-place[=suffix]
edit files in place (makes backup if extension supplied)
Ca serait-y pas l'option recherchée ?!
Du coup « cat mon fichier | sed 's/titi/tata/g' > mon_fichier » devient :
sed -i 's/titi/tata/g' mon_fichier
Décidement faut vraiment se mettre à lire le man... et à bien
l'interpréter ;-)
On Tue, 16 Sep 2003 19:32:03 -0400 Christophe PEREZ wrote:
Non, c'était uniquement l'objectif sed qui m'intéressait.
Déjà cherché justement, mais je pouvais ne pas avoir tout compris, surtout quand j'ai lu récemment quelque chose du même genre (mais je ne sais plus où, en tout cas, ce n'était pas sed) qui traite la totalité du fichier, et n'envoie la sortie qu'après, justement afin de ne pas avoir ce problème d'écrasement. .
visiblement aucun pro de sed ne s'est manifesté dans ce sens.
N'ayant jamais utilisé sed, j'ai pris mon man et ooohh que vois-je... SYNOPSIS sed [OPTION]... {script-only-if-no-other-script} [input-file]...
Là déjà je me pose une question, pourquoi se faire chier avec un « cat nomFichier | » alors qu'il suffit de donner le nom du fichier en paramètre ?!
-i[suffix], --in-place[=suffix] edit files in place (makes backup if extension supplied)
Ca serait-y pas l'option recherchée ?!
Du coup « cat mon fichier | sed 's/titi/tata/g' > mon_fichier » devient : sed -i 's/titi/tata/g' mon_fichier
Décidement faut vraiment se mettre à lire le man... et à bien l'interpréter ;-)
A+,
Bibiche.
Christophe PEREZ
Le Wed, 17 Sep 2003 04:03:21 +0200, Bibiche a écrit:
Là déjà je me pose une question, pourquoi se faire chier avec un « cat nomFichier | » alors qu'il suffit de donner le nom du fichier en paramètre ?!
Ça, je savais, merci, puisque je proposais moi même : Date: Fri, 29 Aug 2003 12:22:06 -0400 From: Christophe PEREZ Message-ID: [...] #!/bin/bash for FICHIER in /le/chemin/les_fichiers* ; do sed 's/titi/tata/g' $FICHIER > /tmp/fichier.tmp mv -f /tmp/fichier.tmp $FICHIER done
-i[suffix], --in-place[=suffix] edit files in place (makes backup if extension supplied)
Ca serait-y pas l'option recherchée ?!
Si tu le dis.
Décidement faut vraiment se mettre à lire le man... et à bien l'interpréter ;-)
Encore faut-il être capable de maîtriser suffisamment l'Anglais pour saisir toutes les finesses.
Si tu savais le nombre de choses que je ne capte pas dans un man !...
Et c'est bien pour ça que dès que l'occasion m'est donné d'en comprendre mieux une option par un exemple concret (d'où la poursuite de ce fil), je saute dessus.
Ceci dit, tu m'as bien mouché, c'est bien, mais sois rassurée, ce n'est ni la première, ni la dernière fois. Mais mon plaisir d'apprendre qui me pousse à poser des questions est toujours plus important que l'orgueil qui me ferait hésiter à le faire.
-- Christophe PEREZ
Le Wed, 17 Sep 2003 04:03:21 +0200, Bibiche a écrit:
Là déjà je me pose une question, pourquoi se faire chier avec un « cat
nomFichier | » alors qu'il suffit de donner le nom du fichier en
paramètre ?!
Ça, je savais, merci, puisque je proposais moi même :
Date: Fri, 29 Aug 2003 12:22:06 -0400
From: Christophe PEREZ <christophe@novazur.com>
Message-ID: <pan.2003.08.29.16.22.05.983527@novazur.fr>
[...]
#!/bin/bash
for FICHIER in /le/chemin/les_fichiers* ; do
sed 's/titi/tata/g' $FICHIER > /tmp/fichier.tmp
mv -f /tmp/fichier.tmp $FICHIER
done
-i[suffix], --in-place[=suffix]
edit files in place (makes backup if extension supplied)
Ca serait-y pas l'option recherchée ?!
Si tu le dis.
Décidement faut vraiment se mettre à lire le man... et à bien
l'interpréter ;-)
Encore faut-il être capable de maîtriser suffisamment l'Anglais pour
saisir toutes les finesses.
Si tu savais le nombre de choses que je ne capte pas dans un man !...
Et c'est bien pour ça que dès que l'occasion m'est donné d'en comprendre
mieux une option par un exemple concret (d'où la poursuite de ce fil), je
saute dessus.
Ceci dit, tu m'as bien mouché, c'est bien, mais sois rassurée, ce n'est ni
la première, ni la dernière fois.
Mais mon plaisir d'apprendre qui me pousse à poser des questions est
toujours plus important que l'orgueil qui me ferait hésiter à le faire.
Le Wed, 17 Sep 2003 04:03:21 +0200, Bibiche a écrit:
Là déjà je me pose une question, pourquoi se faire chier avec un « cat nomFichier | » alors qu'il suffit de donner le nom du fichier en paramètre ?!
Ça, je savais, merci, puisque je proposais moi même : Date: Fri, 29 Aug 2003 12:22:06 -0400 From: Christophe PEREZ Message-ID: [...] #!/bin/bash for FICHIER in /le/chemin/les_fichiers* ; do sed 's/titi/tata/g' $FICHIER > /tmp/fichier.tmp mv -f /tmp/fichier.tmp $FICHIER done
-i[suffix], --in-place[=suffix] edit files in place (makes backup if extension supplied)
Ca serait-y pas l'option recherchée ?!
Si tu le dis.
Décidement faut vraiment se mettre à lire le man... et à bien l'interpréter ;-)
Encore faut-il être capable de maîtriser suffisamment l'Anglais pour saisir toutes les finesses.
Si tu savais le nombre de choses que je ne capte pas dans un man !...
Et c'est bien pour ça que dès que l'occasion m'est donné d'en comprendre mieux une option par un exemple concret (d'où la poursuite de ce fil), je saute dessus.
Ceci dit, tu m'as bien mouché, c'est bien, mais sois rassurée, ce n'est ni la première, ni la dernière fois. Mais mon plaisir d'apprendre qui me pousse à poser des questions est toujours plus important que l'orgueil qui me ferait hésiter à le faire.
-- Christophe PEREZ
TiChou
Dans l'article news:, Christophe PEREZ écrivait :
-i[suffix], --in-place[=suffix] edit files in place (makes backup if extension supplied)
Ca serait-y pas l'option recherchée ?!
Si tu le dis.
Pas totalement. Elle sera peut être satisfaisante pour vous, mais sachez quand même que l'option 'in place' de sed ne conserve pas le propriétaire et le groupe du fichier et ne modifie pas le fichier mais en fait une copie et efface l'ancien, l'inode n'est donc pas conservé non plus, au contraire de l'option 'in place' de perl qui elle conserve _tout_. Cela peut avoir son importance lors de modifications de fichiers ouverts par d'autres processus, par exemple des fichiers logs.
-- TiChou
Dans l'article news:pan.2003.09.17.02.22.46.655015@novazur.fr,
Christophe PEREZ <christophe@novazur.com> écrivait :
-i[suffix], --in-place[=suffix]
edit files in place (makes backup if extension supplied)
Ca serait-y pas l'option recherchée ?!
Si tu le dis.
Pas totalement.
Elle sera peut être satisfaisante pour vous, mais sachez quand même que
l'option 'in place' de sed ne conserve pas le propriétaire et le groupe du
fichier et ne modifie pas le fichier mais en fait une copie et efface
l'ancien, l'inode n'est donc pas conservé non plus, au contraire de l'option
'in place' de perl qui elle conserve _tout_.
Cela peut avoir son importance lors de modifications de fichiers ouverts par
d'autres processus, par exemple des fichiers logs.
-i[suffix], --in-place[=suffix] edit files in place (makes backup if extension supplied)
Ca serait-y pas l'option recherchée ?!
Si tu le dis.
Pas totalement. Elle sera peut être satisfaisante pour vous, mais sachez quand même que l'option 'in place' de sed ne conserve pas le propriétaire et le groupe du fichier et ne modifie pas le fichier mais en fait une copie et efface l'ancien, l'inode n'est donc pas conservé non plus, au contraire de l'option 'in place' de perl qui elle conserve _tout_. Cela peut avoir son importance lors de modifications de fichiers ouverts par d'autres processus, par exemple des fichiers logs.
-- TiChou
Christophe PEREZ
Le Wed, 17 Sep 2003 06:15:24 +0200, TiChou a écrit:
Cela peut avoir son importance lors de modifications de fichiers ouverts par d'autres processus, par exemple des fichiers logs.
C'est clair. Et donc, en fait, ça revient à priori strictement au même que ma solution tout à fait inintéressante pour les mêmes raisons.
Merci beaucoup pour ces précisions que je n'avais même pas pris la peine de vérifier.
-- Christophe PEREZ
Le Wed, 17 Sep 2003 06:15:24 +0200, TiChou a écrit:
Cela peut avoir son importance lors de modifications de fichiers ouverts par
d'autres processus, par exemple des fichiers logs.
C'est clair.
Et donc, en fait, ça revient à priori strictement au même que ma solution
tout à fait inintéressante pour les mêmes raisons.
Merci beaucoup pour ces précisions que je n'avais même pas pris la peine
de vérifier.
je ne pense pas que ça soit possible avec une seule ligne de commande, mais ça peut servir dans un script (j'ai piqué l'idée dans un script de Mandrake...)
je ne pense pas que ça soit possible avec une seule
ligne de commande, mais ça peut servir dans un script (j'ai
piqué l'idée dans un script de Mandrake...)
je ne pense pas que ça soit possible avec une seule ligne de commande, mais ça peut servir dans un script (j'ai piqué l'idée dans un script de Mandrake...)
Gerard
Christophe PEREZ
Le Wed, 17 Sep 2003 20:04:17 +0000, gerard patel a écrit:
si c'est de la sedomanie, je ne peux rien; si c'est de la
Plutôt oui :-)
perlophobie,
pas encore ! ;-)
on peut utiliser ed à la place, comme ici
man ed quoi ! :-)
je ne pense pas que ça soit possible avec une seule ligne de commande, mais ça peut servir dans un script (j'ai piqué l'idée dans un script de Mandrake...)
C'est bon à savoir effectivement. Merci pour l'idée et l'exemple, c'est enregistré, ça servira certainement :-)
-- Christophe PEREZ
Le Wed, 17 Sep 2003 20:04:17 +0000, gerard patel a écrit:
si c'est de la sedomanie, je ne peux rien; si c'est de la
Plutôt oui :-)
perlophobie,
pas encore ! ;-)
on peut utiliser ed à la place, comme ici
man ed quoi ! :-)
je ne pense pas que ça soit possible avec une seule
ligne de commande, mais ça peut servir dans un script (j'ai
piqué l'idée dans un script de Mandrake...)
C'est bon à savoir effectivement.
Merci pour l'idée et l'exemple, c'est enregistré, ça servira certainement
:-)
Le Wed, 17 Sep 2003 20:04:17 +0000, gerard patel a écrit:
si c'est de la sedomanie, je ne peux rien; si c'est de la
Plutôt oui :-)
perlophobie,
pas encore ! ;-)
on peut utiliser ed à la place, comme ici
man ed quoi ! :-)
je ne pense pas que ça soit possible avec une seule ligne de commande, mais ça peut servir dans un script (j'ai piqué l'idée dans un script de Mandrake...)
C'est bon à savoir effectivement. Merci pour l'idée et l'exemple, c'est enregistré, ça servira certainement :-)