Erreur SED scritp Bash

Résolu
pcsystemd Messages postés 734 Statut Membre -  
pcsystemd Messages postés 734 Statut Membre -
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. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    est-ce qu'une des variables contient un / ?
    si oui, utiliser un autre séparateur
    sed -e "
    s+\bODAE\b+${ODAE}+
    ...
    0
  2. pcsystemd Messages postés 734 Statut Membre 23
     
    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.

    0
  3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    A défaut, affiches-nous le contenu de chaque variable, il doit y avoir un caractère qui fiche le bronx quelque part ;-\
    0
  4. pcsystemd Messages postés 734 Statut Membre 23
     
    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.
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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  
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. pcsystemd Messages postés 734 Statut Membre 23
     
    En effet merci de le signaler mais malheureusement l'erreur persiste.

    sed: -e expression #1, char 88: unterminated 's' command
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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}"
      0
  7. pcsystemd Messages postés 734 Statut Membre 23
     
    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
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
      0
  8. pcsystemd Messages postés 734 Statut Membre 23
     
    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.
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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 ?
      0
  9. pcsystemd Messages postés 734 Statut Membre 23
     
    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
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Essaye comme ça :

      UTIT="$(cat ${TMPDIR}/ut_tr21_${DATE}.lst)" 
      0
  10. pcsystemd Messages postés 734 Statut Membre 23
     
    Bonjour,

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

    J'en perds mon latin.

    Merci
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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.
      0
  11. pcsystemd Messages postés 734 Statut Membre 23
     
    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
    0