Avec sed je souhaite remplacer une ligne contenant un terme connu. Voici
où j'en suis :
sed -i "s/\"parametre1\"=45678/\"parametre1\"=12345/g" {} \;
Qui en fait remplace
"parametre1"=45678
par
"parametre1"=12345
Mais, la valeur d'origine du paramètre1 (ici 45678) n'est pas toujours
identique. Comment faire pour remplacer la ligne contenant simplement
"parametre1" ?
Avec sed je souhaite remplacer une ligne contenant un terme connu. Voici où j'en suis :
sed -i "s/"parametre1"E678/"parametre1"345/g" {} ;
Qui en fait remplace "parametre1"E678 par "parametre1"345
Note que tu peux simplifier : "s/"parametre1"E678/"parametre1"345/g" en : "s/("parametre1")E678/1345/g"
À la limite tu pourrais même y inclure le « = » mais je trouve ça un peu moins lisible (question de goût, uniquement).
En revanche, si tu n'as pas de contrainte externe sur le choix des guillemets pour le shell, ça pourrait même être : 's/("parametre1")E678/1345/g'
Mais, la valeur d'origine du paramètre1 (ici 45678) n'est pas toujours identique. Comment faire pour remplacer la ligne contenant simplement "parametre1" ?
Ça c'est une question pour fr.comp.lang.regexp !
Tu peux par exemple remplacer 45678 par [0-9]* ce qui prendra n'importe quelle chaîne de chiffres, quelle que soit leur longueur (même vide). Si tu as des besoins plus précis, par exemple chaîne de longueur 5 uniquement, ou bien obliger la présence d'au moins un chiffre, n'hésite pas à demander.
Donc : "s/("parametre1")=[0-9]*/1345/g"
Cordialement, -- Olivier Miakinen
Bonjour,
Le 04/10/2010 14:28, Punky Brewster a écrit :
Avec sed je souhaite remplacer une ligne contenant un terme connu. Voici
où j'en suis :
sed -i "s/"parametre1"E678/"parametre1"345/g" {} ;
Qui en fait remplace
"parametre1"E678
par
"parametre1"345
Note que tu peux simplifier :
"s/"parametre1"E678/"parametre1"345/g"
en :
"s/("parametre1")E678/1345/g"
À la limite tu pourrais même y inclure le « = » mais je trouve ça un peu
moins lisible (question de goût, uniquement).
En revanche, si tu n'as pas de contrainte externe sur le choix des
guillemets pour le shell, ça pourrait même être :
's/("parametre1")E678/1345/g'
Mais, la valeur d'origine du paramètre1 (ici 45678) n'est pas toujours
identique. Comment faire pour remplacer la ligne contenant simplement
"parametre1" ?
Ça c'est une question pour fr.comp.lang.regexp !
Tu peux par exemple remplacer 45678 par [0-9]* ce qui prendra n'importe
quelle chaîne de chiffres, quelle que soit leur longueur (même vide). Si
tu as des besoins plus précis, par exemple chaîne de longueur 5
uniquement, ou bien obliger la présence d'au moins un chiffre, n'hésite
pas à demander.
Avec sed je souhaite remplacer une ligne contenant un terme connu. Voici où j'en suis :
sed -i "s/"parametre1"E678/"parametre1"345/g" {} ;
Qui en fait remplace "parametre1"E678 par "parametre1"345
Note que tu peux simplifier : "s/"parametre1"E678/"parametre1"345/g" en : "s/("parametre1")E678/1345/g"
À la limite tu pourrais même y inclure le « = » mais je trouve ça un peu moins lisible (question de goût, uniquement).
En revanche, si tu n'as pas de contrainte externe sur le choix des guillemets pour le shell, ça pourrait même être : 's/("parametre1")E678/1345/g'
Mais, la valeur d'origine du paramètre1 (ici 45678) n'est pas toujours identique. Comment faire pour remplacer la ligne contenant simplement "parametre1" ?
Ça c'est une question pour fr.comp.lang.regexp !
Tu peux par exemple remplacer 45678 par [0-9]* ce qui prendra n'importe quelle chaîne de chiffres, quelle que soit leur longueur (même vide). Si tu as des besoins plus précis, par exemple chaîne de longueur 5 uniquement, ou bien obliger la présence d'au moins un chiffre, n'hésite pas à demander.
Donc : "s/("parametre1")=[0-9]*/1345/g"
Cordialement, -- Olivier Miakinen
Marc Boyer
Le 04-10-2010, Punky Brewster a écrit :
Bonjour
Avec sed je souhaite remplacer une ligne contenant un terme connu. Voici où j'en suis :
sed -i "s/"parametre1"E678/"parametre1"345/g" {} ;
Le 04-10-2010, Punky Brewster <punkybrewster@infonie.tld> a écrit :
Bonjour
Avec sed je souhaite remplacer une ligne contenant un terme connu. Voici
où j'en suis :
sed -i "s/"parametre1"E678/"parametre1"345/g" {} ;
sed -i "s/"parametre1"=[0-9]*/"parametre1"345/g"
(pas testé, mais l'idée est là).
Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0
Avec sed je souhaite remplacer une ligne contenant un terme connu. Voici où j'en suis :
sed -i "s/"parametre1"E678/"parametre1"345/g" {} ;
Qui en fait remplace "parametre1"E678 par "parametre1"345
Mais, la valeur d'origine du paramètre1 (ici 45678) n'est pas toujours identique. Comment faire pour remplacer la ligne contenant simplement "parametre1" ?
Merci
Si il ne peut y avoir que des chiffres dans tes paramètres 1 : sed -i 's/"parametre1"=[0-9]*/"parametre1"345/'
"[0-9]*" signifie "une suite de caractères compris entre 0 et 9".
le paramêtre "g" en fin de commande sed n'est utile que si tu peux avoir plusieurs remplacements à faire dans une seule ligne.
man sed et man regex peuvent t'aider pour plus d'élaboration.
-- DeVice
Punky Brewster a écrit :
Bonjour
Avec sed je souhaite remplacer une ligne contenant un terme connu. Voici
où j'en suis :
sed -i "s/"parametre1"E678/"parametre1"345/g" {} ;
Qui en fait remplace
"parametre1"E678
par
"parametre1"345
Mais, la valeur d'origine du paramètre1 (ici 45678) n'est pas toujours
identique. Comment faire pour remplacer la ligne contenant simplement
"parametre1" ?
Merci
Si il ne peut y avoir que des chiffres dans tes paramètres 1 :
sed -i 's/"parametre1"=[0-9]*/"parametre1"345/'
"[0-9]*" signifie "une suite de caractères compris entre 0 et 9".
le paramêtre "g" en fin de commande sed n'est utile que si tu peux avoir
plusieurs remplacements à faire dans une seule ligne.
man sed et man regex peuvent t'aider pour plus d'élaboration.
Avec sed je souhaite remplacer une ligne contenant un terme connu. Voici où j'en suis :
sed -i "s/"parametre1"E678/"parametre1"345/g" {} ;
Qui en fait remplace "parametre1"E678 par "parametre1"345
Mais, la valeur d'origine du paramètre1 (ici 45678) n'est pas toujours identique. Comment faire pour remplacer la ligne contenant simplement "parametre1" ?
Merci
Si il ne peut y avoir que des chiffres dans tes paramètres 1 : sed -i 's/"parametre1"=[0-9]*/"parametre1"345/'
"[0-9]*" signifie "une suite de caractères compris entre 0 et 9".
le paramêtre "g" en fin de commande sed n'est utile que si tu peux avoir plusieurs remplacements à faire dans une seule ligne.
man sed et man regex peuvent t'aider pour plus d'élaboration.
-- DeVice
Punky Brewster
Le Mon, 04 Oct 2010 15:09:27 +0200, Olivier Miakinen a écrit :
Bonjour,
Le 04/10/2010 14:28, Punky Brewster a écrit :
Avec sed je souhaite remplacer une ligne contenant un terme connu. Voici où j'en suis :
sed -i "s/"parametre1"E678/"parametre1"345/g" {} ;
Qui en fait remplace "parametre1"E678 par "parametre1"345
Note que tu peux simplifier : "s/"parametre1"E678/"parametre1"345/g" en : "s/("parametre1")E678/1345/g"
À la limite tu pourrais même y inclure le « = » mais je trouve ça un peu moins lisible (question de goût, uniquement).
En revanche, si tu n'as pas de contrainte externe sur le choix des guillemets pour le shell, ça pourrait même être : 's/("parametre1")E678/1345/g'
Mais, la valeur d'origine du paramètre1 (ici 45678) n'est pas toujours identique. Comment faire pour remplacer la ligne contenant simplement "parametre1" ?
Ça c'est une question pour fr.comp.lang.regexp !
Tu peux par exemple remplacer 45678 par [0-9]* ce qui prendra n'importe quelle chaîne de chiffres, quelle que soit leur longueur (même vide). Si tu as des besoins plus précis, par exemple chaîne de longueur 5 uniquement, ou bien obliger la présence d'au moins un chiffre, n'hésite pas à demander.
Donc : "s/("parametre1")=[0-9]*/1345/g"
Cordialement,
Merci à tous pour les réponses, j'y suis presque (avec l'exemple réel qui inclus des points):
Le Mon, 04 Oct 2010 15:09:27 +0200, Olivier Miakinen a écrit :
Bonjour,
Le 04/10/2010 14:28, Punky Brewster a écrit :
Avec sed je souhaite remplacer une ligne contenant un terme connu.
Voici où j'en suis :
sed -i "s/"parametre1"E678/"parametre1"345/g" {} ;
Qui en fait remplace
"parametre1"E678
par
"parametre1"345
Note que tu peux simplifier :
"s/"parametre1"E678/"parametre1"345/g"
en :
"s/("parametre1")E678/1345/g"
À la limite tu pourrais même y inclure le « = » mais je trouve ça un peu
moins lisible (question de goût, uniquement).
En revanche, si tu n'as pas de contrainte externe sur le choix des
guillemets pour le shell, ça pourrait même être :
's/("parametre1")E678/1345/g'
Mais, la valeur d'origine du paramètre1 (ici 45678) n'est pas toujours
identique. Comment faire pour remplacer la ligne contenant simplement
"parametre1" ?
Ça c'est une question pour fr.comp.lang.regexp !
Tu peux par exemple remplacer 45678 par [0-9]* ce qui prendra n'importe
quelle chaîne de chiffres, quelle que soit leur longueur (même vide). Si
tu as des besoins plus précis, par exemple chaîne de longueur 5
uniquement, ou bien obliger la présence d'au moins un chiffre, n'hésite
pas à demander.
Donc :
"s/("parametre1")=[0-9]*/1345/g"
Cordialement,
Merci à tous pour les réponses, j'y suis presque (avec l'exemple réel qui
inclus des points):
Le Mon, 04 Oct 2010 15:09:27 +0200, Olivier Miakinen a écrit :
Bonjour,
Le 04/10/2010 14:28, Punky Brewster a écrit :
Avec sed je souhaite remplacer une ligne contenant un terme connu. Voici où j'en suis :
sed -i "s/"parametre1"E678/"parametre1"345/g" {} ;
Qui en fait remplace "parametre1"E678 par "parametre1"345
Note que tu peux simplifier : "s/"parametre1"E678/"parametre1"345/g" en : "s/("parametre1")E678/1345/g"
À la limite tu pourrais même y inclure le « = » mais je trouve ça un peu moins lisible (question de goût, uniquement).
En revanche, si tu n'as pas de contrainte externe sur le choix des guillemets pour le shell, ça pourrait même être : 's/("parametre1")E678/1345/g'
Mais, la valeur d'origine du paramètre1 (ici 45678) n'est pas toujours identique. Comment faire pour remplacer la ligne contenant simplement "parametre1" ?
Ça c'est une question pour fr.comp.lang.regexp !
Tu peux par exemple remplacer 45678 par [0-9]* ce qui prendra n'importe quelle chaîne de chiffres, quelle que soit leur longueur (même vide). Si tu as des besoins plus précis, par exemple chaîne de longueur 5 uniquement, ou bien obliger la présence d'au moins un chiffre, n'hésite pas à demander.
Donc : "s/("parametre1")=[0-9]*/1345/g"
Cordialement,
Merci à tous pour les réponses, j'y suis presque (avec l'exemple réel qui inclus des points):
numtel="0892.11.11.11" sed -i -e '/"^telephone":/s/:.*$/:'$numtel'/'
Ce qui peut se traduire par "pour toutes les lignes commençant par la chaîne "telephone:", remplacer à partir du premier caractère ":" jusqu'a la fin de ligne par ":0892.11.11.11"
PS: que font ici les arguments {} ;, ça sent le "find ... -exec" : je me trompe?
-- Gilles
Ref: <JtOdnQNXsO_xQTTRnZ2dnUVZ7sydnZ2d@giganews.com> de Punky Brewster
Merci à tous pour les réponses, j'y suis presque (avec l'exemple réel qui
inclus des points):
numtel="0892.11.11.11"
sed -i -e '/"^telephone":/s/:.*$/:'$numtel'/'
Ce qui peut se traduire par "pour toutes les lignes commençant par la chaîne
"telephone:", remplacer à partir du premier caractère ":" jusqu'a la fin de
ligne par ":0892.11.11.11"
PS: que font ici les arguments {} ;, ça sent le "find ... -exec" : je me
trompe?
numtel="0892.11.11.11" sed -i -e '/"^telephone":/s/:.*$/:'$numtel'/'
Ce qui peut se traduire par "pour toutes les lignes commençant par la chaîne "telephone:", remplacer à partir du premier caractère ":" jusqu'a la fin de ligne par ":0892.11.11.11"
PS: que font ici les arguments {} ;, ça sent le "find ... -exec" : je me trompe?
-- Gilles
Gilles
Ref: de Gilles
Et on peut variabliliser de remplacement:
s/de/le/g -- Gilles
Ref: <91oja6t4skfvqg17afuemucruqk2fjpt6i@4ax.com> de Gilles
Le Mon, 04 Oct 2010 15:09:27 +0200, Olivier Miakinen a écrit :
Merci à tous pour les réponses, j'y suis presque (avec l'exemple réel qui inclus des points):
Sauf que ton exemple réel ne correspond pas à ce que tu as demandé. Ici, les deux principales différences sont: 1) il y a un espace entre ton mot clé et ce que tu veux modifier 2) il y a des points dans le truc à remplacer
Le 04-10-2010, Punky Brewster <punkybrewster@infonie.tld> a écrit :
Le Mon, 04 Oct 2010 15:09:27 +0200, Olivier Miakinen a écrit :
Merci à tous pour les réponses, j'y suis presque (avec l'exemple réel qui
inclus des points):
Sauf que ton exemple réel ne correspond pas à ce que tu as demandé.
Ici, les deux principales différences sont:
1) il y a un espace entre ton mot clé et ce que tu veux modifier
2) il y a des points dans le truc à remplacer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0
Le Mon, 04 Oct 2010 15:09:27 +0200, Olivier Miakinen a écrit :
Merci à tous pour les réponses, j'y suis presque (avec l'exemple réel qui inclus des points):
Sauf que ton exemple réel ne correspond pas à ce que tu as demandé. Ici, les deux principales différences sont: 1) il y a un espace entre ton mot clé et ce que tu veux modifier 2) il y a des points dans le truc à remplacer
Euh... tu es sûr de ça ? Tu as fait un copier-coller ou bien tu as recopié à la main ? En principe, ça devrait donner :
"telephone": 0892.11.11.11 06.07.44.44.44
La chaîne est ajoutée au lieu de remplacer ?
C'est parce que tu n'as pas inclus l'espace et le point dans ta regexp. Essaye par exemple : "s/("telephone"): [0-9.]*/1: 0892.11.11.11/" (sans le g, comme le fait très justement remarquer Gilles)
Ou bien prends l'exemple donné directement par Gilles, il me semble très bien aussi.
Ça y est :) Merci beaucoup. Voici la commande finale :
Alors puisqu'ici tout le monde est sympa j'ai une dernière question (je viens d'y passer 45 minutes sans succès) :
Comment faire : sed -i "s/("Telephone"): "[0-9.]*",/1: "$variable",/" (comment remplacer le numéros de tel par une variable qui au final, doit- être entre guillemets ?) J'ai essayé tel quel, ou avec des simples quotes.
Le Mon, 04 Oct 2010 16:30:37 +0200, Olivier Miakinen a écrit :
Le 04/10/2010 15:53, Punky Brewster m'a répondu :
"s/("parametre1")=[0-9]*/1345/g"
Merci à tous pour les réponses, j'y suis presque (avec l'exemple réel
qui inclus des points):
Euh... tu es sûr de ça ? Tu as fait un copier-coller ou bien tu as
recopié à la main ? En principe, ça devrait donner :
"telephone": 0892.11.11.11 06.07.44.44.44
La chaîne est ajoutée au lieu de remplacer ?
C'est parce que tu n'as pas inclus l'espace et le point dans ta regexp.
Essaye par exemple :
"s/("telephone"): [0-9.]*/1: 0892.11.11.11/"
(sans le g, comme le fait très justement remarquer Gilles)
Ou bien prends l'exemple donné directement par Gilles, il me semble très
bien aussi.
Ça y est :) Merci beaucoup. Voici la commande finale :
Alors puisqu'ici tout le monde est sympa j'ai une dernière question (je
viens d'y passer 45 minutes sans succès) :
Comment faire :
sed -i "s/("Telephone"): "[0-9.]*",/1: "$variable",/"
(comment remplacer le numéros de tel par une variable qui au final, doit-
être entre guillemets ?)
J'ai essayé tel quel, ou avec des simples quotes.
Euh... tu es sûr de ça ? Tu as fait un copier-coller ou bien tu as recopié à la main ? En principe, ça devrait donner :
"telephone": 0892.11.11.11 06.07.44.44.44
La chaîne est ajoutée au lieu de remplacer ?
C'est parce que tu n'as pas inclus l'espace et le point dans ta regexp. Essaye par exemple : "s/("telephone"): [0-9.]*/1: 0892.11.11.11/" (sans le g, comme le fait très justement remarquer Gilles)
Ou bien prends l'exemple donné directement par Gilles, il me semble très bien aussi.
Ça y est :) Merci beaucoup. Voici la commande finale :
Alors puisqu'ici tout le monde est sympa j'ai une dernière question (je viens d'y passer 45 minutes sans succès) :
Comment faire : sed -i "s/("Telephone"): "[0-9.]*",/1: "$variable",/" (comment remplacer le numéros de tel par une variable qui au final, doit- être entre guillemets ?) J'ai essayé tel quel, ou avec des simples quotes.
Gilles
Ref: de Punky Brewster
Le Mon, 04 Oct 2010 16:30:37 +0200, Olivier Miakinen a écrit :
Comment faire : sed -i "s/("Telephone"): "[0-9.]*",/1: "$variable",/" (comment remplacer le numéros de tel par une variable qui au final, doit- être entre guillemets ?) J'ai essayé tel quel, ou avec des simples quotes.
Un poil adapté de la réponse que j'avais donné tout a l'heure:
telnum="<nouveau numéro>" sed -i -e '/"^telephone":/s/:.*$/: "'$telnum'"/'
Je ne pense pas pouvoir faire plus court (et sans parenthèses ni backreference :) ) -- Gilles
Ref: <JtOdnQJXsO8oYDTRnZ2dnUVZ7sydnZ2d@giganews.com> de Punky Brewster
Le Mon, 04 Oct 2010 16:30:37 +0200, Olivier Miakinen a écrit :
Comment faire :
sed -i "s/("Telephone"): "[0-9.]*",/1: "$variable",/"
(comment remplacer le numéros de tel par une variable qui au final, doit-
être entre guillemets ?)
J'ai essayé tel quel, ou avec des simples quotes.
Un poil adapté de la réponse que j'avais donné tout a l'heure:
telnum="<nouveau numéro>"
sed -i -e '/"^telephone":/s/:.*$/: "'$telnum'"/'
Je ne pense pas pouvoir faire plus court (et sans parenthèses ni backreference
:) )
--
Gilles
Le Mon, 04 Oct 2010 16:30:37 +0200, Olivier Miakinen a écrit :
Comment faire : sed -i "s/("Telephone"): "[0-9.]*",/1: "$variable",/" (comment remplacer le numéros de tel par une variable qui au final, doit- être entre guillemets ?) J'ai essayé tel quel, ou avec des simples quotes.
Un poil adapté de la réponse que j'avais donné tout a l'heure:
telnum="<nouveau numéro>" sed -i -e '/"^telephone":/s/:.*$/: "'$telnum'"/'
Je ne pense pas pouvoir faire plus court (et sans parenthèses ni backreference :) ) -- Gilles