Erreur SED scritp Bash

Résolu
Bonjour,

dans un script bash j'utilise SED pour tagguer mon template(template.tpl) ce que j'ai fait a maintes reprises sans problème mais la je ne comprend pas car j'ai toujours l'erreur suivante :

sed: -e expression #1, char 69: unknown option to 's'


Voici mon code:
sed -e "
s/\bODAE\b/${ODAE}/
s/\bDATE\b/${DATE}/
s/\bUTIT\b/${UTIT}/
s/\bTOTTR\b/${TOTTR}/
" template.tpl | mail -s "Message du ${OLDATE} au ${DATE}" toto@mail.com


Si vous souhaiter voir mon script sh en entier pour plus de compréhension, dites le moi.

Merci



--
L'accès au savoir est la première liberté que chaque homme devrait avoir.

10 réponses

  1. Merci pour ton aide zipe31. Finalement comme cela devenait urgent j'ai fait autrement en me passant du sed et en mettant mon template directement dans mon sh et cela fonctionne parfaitement.
    Merci en tout cas
    1. Bonjour,

      cela ne change rien. J'ai toujours :
      sed: -e expression #1, char 88: unterminated 's' command

      J'en perds mon latin.

      Merci
      1. Contributeur
        Essayes de décomposer chaque action :

        cat ${TMPDIR}/ut_tr21_${DATE}.lst
        Renvoie bien le contenu du fichier ?

        UTIT="$(cat ${TMPDIR}/ut_tr21_${DATE}.lst)"
        echo $UTIT

        Renvoie bien le contenu de la variable (et du fichier donc) ?

        etc.
    2. non le but rechercher c'est qu'il me renvoi le contenu du fichier. J'ai d'autres scripts avec la même syntaxe et il me renvoi bien le contenu du fichier mais pas dans ce script et c'est cela qui me rends perplexe.

      c'est pareil pour les autres sauf pour
      s+\bODAE\b+${ODAE}+
      s+\bDATE\b+${DATE}+

      dont j'ai bien la date.

      Merci
      1. Contributeur
        Essaye comme ça :

        UTIT="$(cat ${TMPDIR}/ut_tr21_${DATE}.lst)" 
    3. sed 's+\bUTIT\b+cat /tmp/user/ut_tr21_18-03-2011.lst+'  template.tpl


      me renvoi dans mon template.tpl a la place du tag UTIT :

      cat /tmp/user/ut_tr21_18-03-2011.ls


      et pas le contenu du fichier.

      Je n'y comprends plus rien car j'ai fait cela des multiples fois sans aucun souci.

      Merci en tout cas pour ton aide.
      1. Contributeur
        me renvoi dans mon template.tpl a la place du tag UTIT :
        cat /tmp/user/ut_tr21_18-03-2011.ls
        et pas le contenu du fichier.

        Et est-ce bien le but recherché ?

        As-tu essayé les autres substitutions en procédant de la même manière ?
    4. Voila le contenu des variables :

      UTIT="cat ${TMPDIR}/ut_tr21_${DATE}.lst"
      echo "${UTIT}"

      cat /tmp/user/ut_tr21_18-03-2011.lst

      TOTTR="cat ${TMPDIR}/to_stats_${DATE}.lst"
      echo "${TOTTR}"

      cat /tmp/user/to_stats_18-03-2011.lst

      DATE='date '+%d-%m-%Y''
      echo "${DATE}"

      18-03-2011

      ODAE='date -d '-2 day' '+%d-%m-%Y''
      echo "${ODAE}"

      16-03-2011

      si au lieu de mettre des doubles côtes je mets :

      UTIT='cat ${TMPDIR}/ut_tr21_${DATE}.lst'
      echo "${UTIT}"

      cela affiche le contenu de mon fichier ut_tr21_18-03-2011.lst
      Merci
      1. Contributeur
        si au lieu de mettre des doubles côtes je mets :
        UTIT='cat ${TMPDIR}/ut_tr21_${DATE}.lst'
        echo "${UTIT}"

        cela affiche le contenu de mon fichier ut_tr21_18-03-2011.lst

        Et ce n'est pas le but recherché ?
        Tu veux vraiment que ta variable contienne :
        cat ...
        et non pas le contenu du fichier ?

        Donc remplacer dans ton template "UTIT" par "cat /tmp/user/ut_tr21_18-03-2011.lst" ?

        Essaie de substituer chaque ligne interprétée une à une :

        sed 's+\bUTIT\b+cat /tmp/user/ut_tr21_18-03-2011.lst+'  template.tpl
    5. En effet merci de le signaler mais malheureusement l'erreur persiste.

      sed: -e expression #1, char 88: unterminated 's' command
      1. Contributeur
        Ok, mais déjà la source du problème change à chaque correction :

        sed: -e expression #1, char 69: unknown option to 's'
        sed: -e expression #1, char 25: unterminated 's' command
        sed: -e expression #1, char 88: unterminated 's' command


        Peux-tu afficher le contenu de chaque variable avec un echo s'il te plaît ?
        UTIT="cat ${TMPDIR}/ut_tr21_${DATE}.lst" 
        echo "${UTIT}"
        
        TOTTR="cat ${TMPDIR}/to_stats_${DATE}.lst"  
        echo "${TOTTR}"
        
        DATE='date '+%d-%m-%Y''  
        echo "${DATE}"
        
        ODAE='date -d '-2 day' '+%d-%m-%Y''
        echo "${ODAE}"
    6. Bonjour,
      voici les variables :

      UTIT="cat ${TMPDIR}/ut_tr21_${DATE}.lst"  
      TOTTR="cat ${TMPDIR}/to_stats_${DATE}.lst"  
      DATE='date '+%d-%m-%Y''  
      ODAE='date -d '-2 day' '+%d-%m-%Y''


      Je me suis aperçu en faites après qu'il y avait un / comme dubcek me l'a signalé donc j'ai remplacé comme il me l'indiques le séparateur du sed par + comme cela :
      sed -e "  
      s+\bODAE\b+${ODAE}/  
      s+\bDATE\b+${DATE}/  
      s+\bUTIT\b+${UTIT}/  
      s+\bTOTTR\b+${TOTTR}/  
      " template.tpl | mail -s "Message du ${OLDATE} au ${DATE}" toto@mail.com  
      

      mais j'ai toujours l'erreur suivante :
      sed: -e expression #1, char 25: unterminated 's' command


      Merci
      L'accès au savoir est la première liberté que chaque homme devrait avoir.
      1. Contributeur
        Re-

        Je me suis aperçu en faites après qu'il y avait un / comme dubcek me l'a signalé donc j'ai remplacé comme il me l'indiques le séparateur du sed par + comme cela :

        Il ne faut pas oublier de remplacer TOUS les caractères, y compris le dernier ;-((

        sed -e "  
        s+\bODAE\b+${ODAE}+  
        s+\bDATE\b+${DATE}+ 
        s+\bUTIT\b+${UTIT}+ 
        s+\bTOTTR\b+${TOTTR}+ 
        " template.tpl | mail -s "Message du ${OLDATE} au ${DATE}" toto@mail.com  
    7. Contributeur
      Salut,

      A défaut, affiches-nous le contenu de chaque variable, il doit y avoir un caractère qui fiche le bronx quelque part ;-\
      1. Merci dubcek,

        mais je n'ai pas de / dans mes variables et dans le cas ou j'ai testé ce que tu m'indiques mais j'ai toujours la même erreur.

        1. Contributeur
          hello
          est-ce qu'une des variables contient un / ?
          si oui, utiliser un autre séparateur
          sed -e "
          s+\bODAE\b+${ODAE}+
          ...