Hello
Comment intégrer des variables (issues d'environnement ou d'une ligne de
commande) dans un fichier de commande sed ?
par exemple je filtre le fichier contenant la ligne
"TOTO TITI TATA"
Je voudrais signifier à sed de changer TITI par BUBU *sans avoir à changer
le fichier de commande utilisé*
(TITI et BUBU étant des variables )
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Laurent
Il faudrait peut-être préciser si TITI est remplacé par sa valeur dans "TOTO TITI TATA" car autrement en lisant la ligne "TOTO TITI TATA" rien ne permet de savoir si TITI doit être interprété comme une variable ou bien comme du texte.
Donc si TITI = "coucou" est ce que la ligne "TOTO TITI TATA" est en fait ".... coucou ...." ???
Il faudrait peut-être préciser si TITI est remplacé par sa valeur dans "TOTO
TITI TATA" car autrement en lisant la ligne "TOTO TITI TATA" rien ne permet
de savoir si TITI doit être interprété comme une variable ou bien comme du
texte.
Donc si TITI = "coucou" est ce que la ligne "TOTO TITI TATA" est en fait
".... coucou ...." ???
Il faudrait peut-être préciser si TITI est remplacé par sa valeur dans "TOTO TITI TATA" car autrement en lisant la ligne "TOTO TITI TATA" rien ne permet de savoir si TITI doit être interprété comme une variable ou bien comme du texte.
Donc si TITI = "coucou" est ce que la ligne "TOTO TITI TATA" est en fait ".... coucou ...." ???
Gibier Jean-Charles
"Laurent" a écrit dans le message news: 422ef14f$0$19320$
Il faudrait peut-être préciser si TITI est remplacé par sa valeur dans "TOTO
TITI TATA" car autrement en lisant la ligne "TOTO TITI TATA" rien ne permet
de savoir si TITI doit être interprété comme une variable ou bien comme du texte.
Donc si TITI = "coucou" est ce que la ligne "TOTO TITI TATA" est en fait ".... coucou ...." ???
J'ai mal au crâne d'un coup ;-) TITI est remplacé par une valeur passée en paramètre (je ne sais pas si ça répond à la question). Pour faire un exemple plus pratique ... J'ai ceci dans un fichier de commande sed "sed.cmd" : ------------8<------------------ s/ARTICLE/La/ s/OBJET/voiture/ s/COULEUR/rouge/ ------------8<------------------
J'ai ceci dans mon texte "toto.txt" ------------8<------------------ ARTICLE OBJET est COULEUR ------------8<------------------
$cat toto.txt | sed -f'sed.cmd'
donne (sauf erreur) :
$La voiture est rouge.
Ce que je voudrais savoir c'est s'il est possible de passer mes mes chaînes de substitution : "La","voiture","rouge" comme paramètres.
Du style (bien sûr ça ne marche pas mais c'est parlant ;-)
Bref une manière de ne pas avoir à mettre les chaîne en 'dur' dans le fichier de commande ...
JCG
"Laurent" <tnerual@abc.com> a écrit dans le message news:
422ef14f$0$19320$8fcfb975@news.wanadoo.fr...
Il faudrait peut-être préciser si TITI est remplacé par sa valeur dans
"TOTO
TITI TATA" car autrement en lisant la ligne "TOTO TITI TATA" rien ne
permet
de savoir si TITI doit être interprété comme une variable ou bien comme du
texte.
Donc si TITI = "coucou" est ce que la ligne "TOTO TITI TATA" est en fait
".... coucou ...." ???
J'ai mal au crâne d'un coup ;-)
TITI est remplacé par une valeur passée en paramètre (je ne sais pas si ça
répond à la question).
Pour faire un exemple plus pratique ...
J'ai ceci dans un fichier de commande sed "sed.cmd" :
------------8<------------------
s/ARTICLE/La/
s/OBJET/voiture/
s/COULEUR/rouge/
------------8<------------------
J'ai ceci dans mon texte "toto.txt"
------------8<------------------
ARTICLE OBJET est COULEUR
------------8<------------------
$cat toto.txt | sed -f'sed.cmd'
donne (sauf erreur) :
$La voiture est rouge.
Ce que je voudrais savoir c'est s'il est possible de passer mes mes chaînes
de substitution : "La","voiture","rouge" comme paramètres.
Du style (bien sûr ça ne marche pas mais c'est parlant ;-)
"Laurent" a écrit dans le message news: 422ef14f$0$19320$
Il faudrait peut-être préciser si TITI est remplacé par sa valeur dans "TOTO
TITI TATA" car autrement en lisant la ligne "TOTO TITI TATA" rien ne permet
de savoir si TITI doit être interprété comme une variable ou bien comme du texte.
Donc si TITI = "coucou" est ce que la ligne "TOTO TITI TATA" est en fait ".... coucou ...." ???
J'ai mal au crâne d'un coup ;-) TITI est remplacé par une valeur passée en paramètre (je ne sais pas si ça répond à la question). Pour faire un exemple plus pratique ... J'ai ceci dans un fichier de commande sed "sed.cmd" : ------------8<------------------ s/ARTICLE/La/ s/OBJET/voiture/ s/COULEUR/rouge/ ------------8<------------------
J'ai ceci dans mon texte "toto.txt" ------------8<------------------ ARTICLE OBJET est COULEUR ------------8<------------------
$cat toto.txt | sed -f'sed.cmd'
donne (sauf erreur) :
$La voiture est rouge.
Ce que je voudrais savoir c'est s'il est possible de passer mes mes chaînes de substitution : "La","voiture","rouge" comme paramètres.
Du style (bien sûr ça ne marche pas mais c'est parlant ;-)
Bref une manière de ne pas avoir à mettre les chaîne en 'dur' dans le fichier de commande ...
JCG
Laurent
Ben j'aurais dit que c'est directement possible d'écrire avec la syntaxe de ton exemple, comme c'est montré en bas de cette page : http://docs.hp.com/en/B2355-90128/sed.1.html Mais je suppose que tu as du essayer sans succès ??? à moins que tu ais oublié des accolades pour lever une ambiguité possible : ${TITI}.
Ben j'aurais dit que c'est directement possible d'écrire avec la syntaxe de
ton exemple, comme c'est montré en bas de cette page :
http://docs.hp.com/en/B2355-90128/sed.1.html
Mais je suppose que tu as du essayer sans succès ??? à moins que tu ais
oublié des accolades pour lever une ambiguité possible : ${TITI}.
Ben j'aurais dit que c'est directement possible d'écrire avec la syntaxe de ton exemple, comme c'est montré en bas de cette page : http://docs.hp.com/en/B2355-90128/sed.1.html Mais je suppose que tu as du essayer sans succès ??? à moins que tu ais oublié des accolades pour lever une ambiguité possible : ${TITI}.
Pascal Bourguignon
"Gibier Jean-Charles" writes:
Pour faire un exemple plus pratique ... J'ai ceci dans un fichier de commande sed "sed.cmd" : ------------8<------------------ s/ARTICLE/La/ s/OBJET/voiture/ s/COULEUR/rouge/ ------------8<------------------
J'ai ceci dans mon texte "toto.txt" ------------8<------------------ ARTICLE OBJET est COULEUR ------------8<------------------
$cat toto.txt | sed -f'sed.cmd'
donne (sauf erreur) :
$La voiture est rouge.
Ce que je voudrais savoir c'est s'il est possible de passer mes mes chaînes de substitution : "La","voiture","rouge" comme paramètres.
Du style (bien sûr ça ne marche pas mais c'est parlant ;-)
Bref une manière de ne pas avoir à mettre les chaîne en 'dur' dans le fichier de commande ...
Si tu peux te passer d'un fichier de commande sed, c'est super simple:
sed -e "s/ARTICLE/${ARTICLE}/" ...
Des substitutions peuvent être faites par le shell pour les données immédiates, mais sed ne prend pas en entrée un fichier de commandes, mais un fichier données, alors il faut passer par un fichier temporaire:
ARTICLE=Le OBJET=chat COULEUR=noir
cat > /tmp/$$.sed <<"EOF" s/ARTICLE/${ARTICLE}/ s/OBJET/${OBJET}/ s/COULEUR/${COULEUR}/ EOF sed -f /tmp/$$.sed < in > out
Bien entendu, il faut faire attention quand on utilise $ dans une regexp: il faudra mettre un anti-slash devant.
Finalement, je ne comprends pas pourquoi tu pose la question: tu sais te servir de sed non?
Mais comme tu vois, s'il s'agit d'une simple série de substitution, ce n'est pas la peine de passer par un fichier de commande. Seulement si on s'amuse avec des boucles ou les espaces de motif ou de sauvegarde un fichier de commande script devient utile.
Pour faire un exemple plus pratique ...
J'ai ceci dans un fichier de commande sed "sed.cmd" :
------------8<------------------
s/ARTICLE/La/
s/OBJET/voiture/
s/COULEUR/rouge/
------------8<------------------
J'ai ceci dans mon texte "toto.txt"
------------8<------------------
ARTICLE OBJET est COULEUR
------------8<------------------
$cat toto.txt | sed -f'sed.cmd'
donne (sauf erreur) :
$La voiture est rouge.
Ce que je voudrais savoir c'est s'il est possible de passer mes mes chaînes
de substitution : "La","voiture","rouge" comme paramètres.
Du style (bien sûr ça ne marche pas mais c'est parlant ;-)
Bref une manière de ne pas avoir à mettre les chaîne en 'dur' dans le
fichier de commande ...
Si tu peux te passer d'un fichier de commande sed, c'est super simple:
sed -e "s/ARTICLE/${ARTICLE}/" ...
Des substitutions peuvent être faites par le shell pour les données
immédiates, mais sed ne prend pas en entrée un fichier de commandes,
mais un fichier données, alors il faut passer par un fichier
temporaire:
ARTICLE=Le
OBJET=chat
COULEUR=noir
cat > /tmp/$$.sed <<"EOF"
s/ARTICLE/${ARTICLE}/
s/OBJET/${OBJET}/
s/COULEUR/${COULEUR}/
EOF
sed -f /tmp/$$.sed < in > out
Bien entendu, il faut faire attention quand on utilise $ dans une
regexp: il faudra mettre un anti-slash devant.
Finalement, je ne comprends pas pourquoi tu pose la question: tu sais
te servir de sed non?
Mais comme tu vois, s'il s'agit d'une simple série de substitution, ce
n'est pas la peine de passer par un fichier de commande. Seulement si
on s'amuse avec des boucles ou les espaces de motif ou de sauvegarde
un fichier de commande script devient utile.
Pour faire un exemple plus pratique ... J'ai ceci dans un fichier de commande sed "sed.cmd" : ------------8<------------------ s/ARTICLE/La/ s/OBJET/voiture/ s/COULEUR/rouge/ ------------8<------------------
J'ai ceci dans mon texte "toto.txt" ------------8<------------------ ARTICLE OBJET est COULEUR ------------8<------------------
$cat toto.txt | sed -f'sed.cmd'
donne (sauf erreur) :
$La voiture est rouge.
Ce que je voudrais savoir c'est s'il est possible de passer mes mes chaînes de substitution : "La","voiture","rouge" comme paramètres.
Du style (bien sûr ça ne marche pas mais c'est parlant ;-)
Bref une manière de ne pas avoir à mettre les chaîne en 'dur' dans le fichier de commande ...
Si tu peux te passer d'un fichier de commande sed, c'est super simple:
sed -e "s/ARTICLE/${ARTICLE}/" ...
Des substitutions peuvent être faites par le shell pour les données immédiates, mais sed ne prend pas en entrée un fichier de commandes, mais un fichier données, alors il faut passer par un fichier temporaire:
ARTICLE=Le OBJET=chat COULEUR=noir
cat > /tmp/$$.sed <<"EOF" s/ARTICLE/${ARTICLE}/ s/OBJET/${OBJET}/ s/COULEUR/${COULEUR}/ EOF sed -f /tmp/$$.sed < in > out
Bien entendu, il faut faire attention quand on utilise $ dans une regexp: il faudra mettre un anti-slash devant.
Finalement, je ne comprends pas pourquoi tu pose la question: tu sais te servir de sed non?
Mais comme tu vois, s'il s'agit d'une simple série de substitution, ce n'est pas la peine de passer par un fichier de commande. Seulement si on s'amuse avec des boucles ou les espaces de motif ou de sauvegarde un fichier de commande script devient utile.
Nobody can fix the economy. Nobody can be trusted with their finger on the button. Nobody's perfect. VOTE FOR NOBODY.
manu
jean-charles Gibier wrote:
"TOTO TITI TATA" Je voudrais signifier à sed de changer TITI par BUBU *sans avoir à changer le fichier de commande utilisé* (TITI et BUBU étant des variables )
Suffit d'utiliser des double quotes:
p=TITI t=BUBU echo "TOTO TITI TATA" | sed "s/$p/$t/"
-- Emmanuel Dreyfus Le cahier de l'admin BSD 2eme ed. est dans toutes les bonnes librairies http://www.eyrolles.com/Informatique/Livre/9782212114638/livre-bsd.php
"TOTO TITI TATA"
Je voudrais signifier à sed de changer TITI par BUBU *sans avoir à changer
le fichier de commande utilisé*
(TITI et BUBU étant des variables )
Suffit d'utiliser des double quotes:
p=TITI
t=BUBU
echo "TOTO TITI TATA" | sed "s/$p/$t/"
--
Emmanuel Dreyfus
Le cahier de l'admin BSD 2eme ed. est dans toutes les bonnes librairies
http://www.eyrolles.com/Informatique/Livre/9782212114638/livre-bsd.php
manu@netbsd.org
"TOTO TITI TATA" Je voudrais signifier à sed de changer TITI par BUBU *sans avoir à changer le fichier de commande utilisé* (TITI et BUBU étant des variables )
Suffit d'utiliser des double quotes:
p=TITI t=BUBU echo "TOTO TITI TATA" | sed "s/$p/$t/"
-- Emmanuel Dreyfus Le cahier de l'admin BSD 2eme ed. est dans toutes les bonnes librairies http://www.eyrolles.com/Informatique/Livre/9782212114638/livre-bsd.php
jean-charles Gibier
"Laurent" a écrit dans le message news: 422f7faa$0$20253$
Ben j'aurais dit que c'est directement possible d'écrire avec la syntaxe de
ton exemple, comme c'est montré en bas de cette page : http://docs.hp.com/en/B2355-90128/sed.1.html Mais je suppose que tu as du essayer sans succès ??? à moins que tu ais oublié des accolades pour lever une ambiguité possible : ${TITI}.
Avec les expressions dans la ligne de commande oui j'ai essayé avec succès. Mais j'aime bien pinailler ;-)
"Laurent" <tnerual@abc.com> a écrit dans le message news:
422f7faa$0$20253$8fcfb975@news.wanadoo.fr...
Ben j'aurais dit que c'est directement possible d'écrire avec la syntaxe
de
ton exemple, comme c'est montré en bas de cette page :
http://docs.hp.com/en/B2355-90128/sed.1.html
Mais je suppose que tu as du essayer sans succès ??? à moins que tu ais
oublié des accolades pour lever une ambiguité possible : ${TITI}.
Avec les expressions dans la ligne de commande oui j'ai essayé avec succès.
Mais j'aime bien pinailler ;-)
"Laurent" a écrit dans le message news: 422f7faa$0$20253$
Ben j'aurais dit que c'est directement possible d'écrire avec la syntaxe de
ton exemple, comme c'est montré en bas de cette page : http://docs.hp.com/en/B2355-90128/sed.1.html Mais je suppose que tu as du essayer sans succès ??? à moins que tu ais oublié des accolades pour lever une ambiguité possible : ${TITI}.
Avec les expressions dans la ligne de commande oui j'ai essayé avec succès. Mais j'aime bien pinailler ;-)
jean-charles Gibier
"Pascal Bourguignon" a écrit dans le message news:
Des substitutions peuvent être faites par le shell pour les données immédiates, mais sed ne prend pas en entrée un fichier de commandes, mais un fichier données, alors il faut passer par un fichier temporaire:
ARTICLE=Le OBJET=chat COULEUR=noir
cat > /tmp/$$.sed <<"EOF" s/ARTICLE/${ARTICLE}/ s/OBJET/${OBJET}/ s/COULEUR/${COULEUR}/ EOF sed -f /tmp/$$.sed < in > out
J'ai pensé à ça mais je ne veux pas faire d'usine à gaz. En fait je pensais à une option mystérieuse qui m'aurait réglé ça par magie ;-)
Bien entendu, il faut faire attention quand on utilise $ dans une regexp: il faudra mettre un anti-slash devant.
Finalement, je ne comprends pas pourquoi tu pose la question: tu sais te servir de sed non?
Un peu oui mais je pense ne pas en avoir fait le tour. C'est pour ça que je viens sur fr.c.o.u ;-)
Mais comme tu vois, s'il s'agit d'une simple série de substitution, ce n'est pas la peine de passer par un fichier de commande. Seulement si on s'amuse avec des boucles ou les espaces de motif ou de sauvegarde un fichier de commande script devient utile.
Ben oui je pense que je vais en passer par là : un shell avec des expressions contenant des variables dans la ligne de commande. Merci.
JCG
"Pascal Bourguignon" <spam@mouse-potato.com> a écrit dans le message news:
87r7ionxz0.fsf@thalassa.informatimago.com...
Des substitutions peuvent être faites par le shell pour les données
immédiates, mais sed ne prend pas en entrée un fichier de commandes,
mais un fichier données, alors il faut passer par un fichier
temporaire:
ARTICLE=Le
OBJET=chat
COULEUR=noir
cat > /tmp/$$.sed <<"EOF"
s/ARTICLE/${ARTICLE}/
s/OBJET/${OBJET}/
s/COULEUR/${COULEUR}/
EOF
sed -f /tmp/$$.sed < in > out
J'ai pensé à ça mais je ne veux pas faire d'usine à gaz.
En fait je pensais à une option mystérieuse qui m'aurait réglé ça par magie
;-)
Bien entendu, il faut faire attention quand on utilise $ dans une
regexp: il faudra mettre un anti-slash devant.
Finalement, je ne comprends pas pourquoi tu pose la question: tu sais
te servir de sed non?
Un peu oui mais je pense ne pas en avoir fait le tour.
C'est pour ça que je viens sur fr.c.o.u ;-)
Mais comme tu vois, s'il s'agit d'une simple série de substitution, ce
n'est pas la peine de passer par un fichier de commande. Seulement si
on s'amuse avec des boucles ou les espaces de motif ou de sauvegarde
un fichier de commande script devient utile.
Ben oui je pense que je vais en passer par là : un shell avec des
expressions contenant des variables dans la ligne de commande.
Merci.
"Pascal Bourguignon" a écrit dans le message news:
Des substitutions peuvent être faites par le shell pour les données immédiates, mais sed ne prend pas en entrée un fichier de commandes, mais un fichier données, alors il faut passer par un fichier temporaire:
ARTICLE=Le OBJET=chat COULEUR=noir
cat > /tmp/$$.sed <<"EOF" s/ARTICLE/${ARTICLE}/ s/OBJET/${OBJET}/ s/COULEUR/${COULEUR}/ EOF sed -f /tmp/$$.sed < in > out
J'ai pensé à ça mais je ne veux pas faire d'usine à gaz. En fait je pensais à une option mystérieuse qui m'aurait réglé ça par magie ;-)
Bien entendu, il faut faire attention quand on utilise $ dans une regexp: il faudra mettre un anti-slash devant.
Finalement, je ne comprends pas pourquoi tu pose la question: tu sais te servir de sed non?
Un peu oui mais je pense ne pas en avoir fait le tour. C'est pour ça que je viens sur fr.c.o.u ;-)
Mais comme tu vois, s'il s'agit d'une simple série de substitution, ce n'est pas la peine de passer par un fichier de commande. Seulement si on s'amuse avec des boucles ou les espaces de motif ou de sauvegarde un fichier de commande script devient utile.
Ben oui je pense que je vais en passer par là : un shell avec des expressions contenant des variables dans la ligne de commande. Merci.