IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Sed et variables


Sujet :

Shell et commandes GNU

  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 273
    Par défaut Sed et variables
    Bonjour,

    J'ai un soucis, j'ai un sed à faire pour remplacer une chaine par une autre.
    bon il n'y a pas de soucis de particulier sauf... que cette ligne est un path vers un fichier à rempalcer par un autre path.
    je ne sais pas comment faire pour faire en sorte que la commande sed n'interprète pas les caractères du path comme des caractère spéciaux.

    vous auriez une idée?
    merci

  2. #2
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 273
    Par défaut Sed et variables
    Bonjour,

    Je suis en train de bosser sur un script bash qui nécessite que je remplace certaines chaînes par d'autres dans un fichier.
    Donc pour faire cela j'utilise sed, mais j'aimerai savoir comment faire pour utiliser des variables dans cette commande ?

    Voilà mon script qui ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    temp_dir="you pi il fe beau"
    var1="you"
    var2="me"
     
    var_bidul=$(echo $temp_dir | sed -e 's/$var1/$var2/g')
     
    echo $var_bidul

  3. #3
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    [francois@lpne ~] toto=abc
    [francois@lpne ~] titi=a
    [francois@lpne ~] tutu=d
    [francois@lpne ~] echo $toto | sed 's/'$titi'/'$tutu'/'
    dbc
    [francois@lpne ~]
    il faut dé quotter les variables dans sed. tout simplement (enfin simplement ... une fois qu'on le sait quoi...)

    normalement la syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $toto | sed "s/$titi/$tutu/g"
    est aussi censée fonctionner.

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Bonjour,

    sans davantage de détails, je dirai :
    changer le séparateur de sed par un caractère qui n'interférera pas.

    pour les remplacements, ça se fait tout seul : sed 's@/mon/path@/unAutre/path@';

    pour les recherches, il faut d'abord protéger le caractère choisi : sed '\@/mon/path/@'
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 273
    Par défaut
    Ok d'accord. Alors plus compliqué : comment faire pour que le sed n'interprète bien de ce qui se trouve dans les variables comme étant un caractère spécial ou autre?

  6. #6
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    Citation Envoyé par danathane Voir le message
    Ok d'accord. Alors plus compliqué : coment faire pour que le sed n'interprète bien de ce qui se trouve dans les variables comme étant un caractère spécial ou autre?
    en respectant les regexp correspondantes à la protection des caractères spéciaux.

    déjà
    faire ${var} au lieu de $var
    pour un texte contenant un caractère spécial par exemple le doubler \\,"\ "pour l'espace par exemple ou tout caractère "non-imprimable", \?, \$
    etc...

    attention aussi à bien tester le contenu de la variable avant injection dans les fichiers de sortie...ça évite les surprises (qui sont en générale mauvaises ).

  7. #7
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 273
    Par défaut
    Alors le truc par exemple, c'est que dans un fichier, je dois changer un path par un autre, mais cela de façon dynamique, ça change tout le temps, donc je ne peux pas vraiment doubler les "\" ou mettre les "\" avant tous les caractères spéciaux.

    Est-ce que vous auriez un exemple ou corriger l'erreur de mon script ? je m'acharne dessus depuis tout à l'heure sans succès

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
     
    temp_dir="you pi/ i./*$\$l fe beau"
    var1="/"
    var2="me"
     
    var_bidul=$(echo $temp_dir | sed s/$var1/$var2/g)
     
    echo $var_bidul

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var_bidul=$(echo $temp_dir | sed s/$var1/$var2/g)
    var_bidul=$(echo $temp_dir | sed "s#$var1#$var2#g")

  9. #9
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 273
    Par défaut
    On peut utiliser le # à la place du / pour séparer les morceau de l'expression régulière? je ne connaissais pas du tout.

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Tu peux utiliser le séparateur de ton choix. En admettant que tu n'aies pas de "A" dans ton expression :

    Marchera tout aussi bien

  11. #11
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    Citation Envoyé par danathane Voir le message
    On peut utiliser le # à la place du / pour séparer les morceau de l'expression régulière? je ne connaissais pas du tout.
    le premier caractère de la commande substitute de sed sert de séparateur

Discussions similaires

  1. Utilisation de la commande sed avec variable
    Par elfide dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 09/12/2011, 17h56
  2. Sed et variable
    Par lavazavio dans le forum Linux
    Réponses: 4
    Dernier message: 15/09/2011, 14h16
  3. [QST] sed et variable
    Par hannibal.76 dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 25/04/2011, 11h40
  4. Substitution sed avec variables
    Par zekounnet dans le forum Linux
    Réponses: 0
    Dernier message: 29/11/2008, 13h16
  5. SED et variables.
    Par pcsystemd dans le forum Shell et commandes GNU
    Réponses: 11
    Dernier message: 06/05/2008, 11h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo