#1 Le 13/09/2007, à 14:16
- vieurou
[shell] sed et remplacement par variable
bonjour j'essai en vain de remplacer dans un lot de fichier une chaîne de caractère par une autre , cette autre chaîne étant contenu dans une variable
je fais :
sed -i -e 's/^chaîne_a_remplacer_qui_se_trouve_en_début_de_ligne/'$variable_contenant_ma_chaîne'/g'
mais ça ne fonctionne pas , quelqu'un a t'il une idée
aussi, je voudrait supprimer les commentaires , plus précisément tout les lignes contenu entre un "/*" et un "*/" , les lignes contenant ces début et fin de commentaire doivent être supprimer également, et là je sais pas du tout
merci de vos réponses
Hors ligne
#2 Le 13/09/2007, à 16:41
- SeB
Re : [shell] sed et remplacement par variable
Pour utiliser des variables essaye
cat fichier | sed -e "s/chaine 1/`echo $VARIABLE`/g"
les ` (ou backquotes) c'est ATL GR + 7 (enfin sur mon clavier )
Hors ligne
#3 Le 13/09/2007, à 18:38
- BlaireauOne
Re : [shell] sed et remplacement par variable
Il faut mettre des double-quotes et non pas des simple-quotes
sed -i "s/^chaîne_début_de_ligne/$variable/" fichier
Hors ligne
#4 Le 13/09/2007, à 18:39
- JoelS
Re : [shell] sed et remplacement par variable
cat fichier | sed -e "s/chaine 1/`echo $VARIABLE`/g"
Pas la peine de faire si compliqué. Dans un script shell (valable aussi en Perl, Tcl et probablement d'autres langages qui descendent des shells) on délimite une chaîne de caractères entre un ' ouvrant et un ' fermant, ou bien entre un " ouvrant et un " fermant. La différence entre les 2 types de délimiteurs est que le ' empêche le shell (perl, tcl, etc etc) d'effectuer la substitution de variables alors que le " autorise la substitution.
Donc
VARIABLE=toto
cat fichier | sed -e "s/chaine 1/$VARIABLE/g"
doit marcher.
Hors ligne
#5 Le 13/09/2007, à 22:21
- Alain.g
Re : [shell] sed et remplacement par variable
Ceci dit ton exemple devrait marcher aussi.
i=a ; echo toto | sed 's/o/'$i'/g'
fonctionne sans problème. Faudrait donc voir ce que tu as vraiment mis.
aussi, je voudrait supprimer les commentaires , plus précisément tout les lignes contenu entre un "/*" et un "*/" , les lignes contenant ces début et fin de commentaire doivent être supprimer également, et là je sais pas du tout
Voici un script tout fait : http://sed.sourceforge.net/grabbag/scripts/remccoms1.sed
d'autres exemples : http://sed.sourceforge.net/grabbag/scripts/
Pour les substitutions "multilignes" je trouve plus facile de les faire avec perl.
Exemple (à tester avant) :
perl -0777 -i -pe 's!/\*.*?\*/!!gs' fichier
Dernière modification par Alain.g (Le 14/09/2007, à 07:05)
Xubuntu Karmic !
Hors ligne
#6 Le 18/09/2007, à 16:03
- vieurou
Re : [shell] sed et remplacement par variable
merci a tous
Hors ligne
#7 Le 20/06/2014, à 15:55
- BioHaZarK
Re : [shell] sed et remplacement par variable
SeB a écrit :cat fichier | sed -e "s/chaine 1/`echo $VARIABLE`/g"
Pas la peine de faire si compliqué. Dans un script shell (valable aussi en Perl, Tcl et probablement d'autres langages qui descendent des shells) on délimite une chaîne de caractères entre un ' ouvrant et un ' fermant, ou bien entre un " ouvrant et un " fermant. La différence entre les 2 types de délimiteurs est que le ' empêche le shell (perl, tcl, etc etc) d'effectuer la substitution de variables alors que le " autorise la substitution.
Merci JoelS !
Ce sont des explications comme ça qui font comprendre la chose et progresser les noobs.
Dernière modification par BioHaZarK (Le 20/06/2014, à 15:55)
Hors ligne
#8 Le 13/03/2017, à 14:13
- cyrilpop
Re : [shell] sed et remplacement par variable
Je remonte ce vieux sujet, car j'ai un big sucis.
Ma variable contient des caractères spéciaux du style :
ma_var="f!2q&czLkB@"
et mon sed par en vrille complet, il interprete le & comme je ne sais pas quoi et du coup, la substitution est très bizarre :
Mon sed est
cat $fichier | sed -e s/'\$Ma_chaine$'/"$ldap_passwd"/ $fichier > $fichier.tmp && mv $fichier.tmp $fichier
Voici le diff entre avant et après
321c321
< "password": "$Ma_chaine$"
---
> "password": "f!2q$Ma_chaine$czLkB@9"
Comment résoudre ce soucis ? sans devoir changer le contenu de la variable (& par \&)
Hors ligne
#9 Le 13/03/2017, à 14:39
- Watael
Re : [shell] sed et remplacement par variable
salut,
il est moisi ton sed :
cat inutile.
fichier temporaire inutile.
maVar='f!2q&czLkB@' # attention au ! qui entre guillemets effectue une substitution d'historique
printf -v maVarPourSed '%q' "$maVar"
sed -i 's/\$Ma_chaine$/'"$maVarPourSed"'/' "$fichier"
Dernière modification par Watael (Le 13/03/2017, à 14:40)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#10 Le 14/03/2017, à 08:29
- cyrilpop
Re : [shell] sed et remplacement par variable
Merci, ça résout mon problème
Il va falloir que je prenne des cours de sed !
Hors ligne