Sed dans un script

Résolu
Bonjour,

Quand J'écris cela dans un script:
sed -e "$cde" -i /etc/hosts;

L'exécution me dit:
sed: -e expression n°1, caractère 32: option inconnue pour `s'

Si j'écris avec le contenu de la variable:
sed -e s/86.66.183.122/86.66.183.123/g  -i /etc/hosts;

Ça fonctionne.
A mon avis il devrait y avoir une erreur de syntaxe, mais j'ai essayé plein de solution et je n'y arrive pas.

Une idée ?



Chercheur en améliorations.

1 réponse

  1. Contributeur
    Salut,

    Affiche la variable ${cde} (
    echo "${cde}"
    ) avant de la passer à sed histoire de voir si elle est bien conforme à tes attentes.

    Tu peux aussi rajouter
    set -x
    à ton script juste en dessous du shebang (
    #!/bin/bash
    ) histoire de voir ce qu'interprète le shell
    0
    1. Effectivement ça marche. Par contre je constate que s'il n'y a pas d’occurrence à remplacer on obtient le message "option inconnue pour `s'".
      Merci zipe31.
      0
    2. Contributeur
      @thierryR51
      Par contre je constate que s'il n'y a pas d’occurrence à remplacer on obtient le message "option inconnue pour `s'".
      Tu veux parler d'occurrence (syntaxe de sed) vide ou de variable ($cde) vide ?
      0
    3. Dans notre exemple si $cde est correct et si "sed" ne trouve rien à remplacer dans le fichier hosts, il met ce message d'erreur en console.
      Voila. J'espère mieux m'exprimer. Merci.
      0
    4. Contributeur
      @thierryR51C'est bizarre ;-\

      Normalement sed n'est pas très réputé pour être très bavard, surtout dans ce genre de cas ;-\

      Par contre le fait de mettre une commande entière dans une variable n'est peut-être pas ce qui se fait de mieux.
      Il vaudrait mieux privilégier 2 variables :

      ip_ini="86.66.183.122"
      ip_rep="86.66.183.123"
      sed -i "s/${ip_ini}/${ip_rep}/" /etc/hosts


      Le "g" est inutile, il n'y a pas 2 adresses similaires sur la même ligne dans le fichier hosts ;-\
      0
    5. OK Merci zipe31. Je vais suivre ton expérience.
      0