Contenu | Rechercher | Menus

Annonce

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Pour en savoir un peu plus sur l'équipe du forum.

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

#1 Le 13/09/2007, à 15: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, à 17: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 smile )

Hors ligne

#3 Le 13/09/2007, à 19:38

BlaireauOne

Re : [shell] sed et remplacement par variable

Il faut mettre des double-quotes et non pas des simple-quotes cool


sed -i "s/^chaîne_début_de_ligne/$variable/"  fichier

Hors ligne

#4 Le 13/09/2007, à 19:39

JoelS

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.

Donc

VARIABLE=toto
cat fichier | sed -e "s/chaine 1/$VARIABLE/g"

doit marcher.

Hors ligne

#5 Le 13/09/2007, à 23: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, à 08:05)


Xubuntu Karmic !

Hors ligne

#6 Le 18/09/2007, à 17:03

vieurou

Re : [shell] sed et remplacement par variable

merci a tous

Hors ligne

#7 Le 20/06/2014, à 16:55

BioHaZarK

Re : [shell] sed et remplacement par variable

JoelS a écrit :
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, à 16:55)

Hors ligne

#8 Le 13/03/2017, à 15: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, à 15: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, à 15:40)


eval, c'est mal.

Hors ligne

#10 Le 14/03/2017, à 09:29

cyrilpop

Re : [shell] sed et remplacement par variable

Merci, ça résout mon problème smile
Il va falloir que je prenne des cours de sed !

Hors ligne