Utilisation de SED

Résolu
Bonjour,

dans mon script bash j'ai ceci :

DATE='date '+%d-%m-%Y''
EVENT='cat event_mois_${DATE}.txt'
NSOL='cat sol_${DATE}.txt'

sed -e "
s/\bDATE\b/${DATE}/
s/\bEVENT\b/${EVENT}/
s/\bNSOL\b/${NSOL}/
" stats.tpl  | mail -s "blabla ${DATE}" toto@mail.fr


Comme on peut voir ci-dessous quand je lance mon script en DEBUG,sed me récupéré bien les valeurs mais j'ai une erreur SED avant d'envoyer le mail qui est vide :

+ sed -e '
s/\bDATE\b/22-02-2012/
s/\bEVENT\b/
82|01/01/2012
80|01/02/2012 00:00:00 CET/
s/\bNSOL\b/329256/
' stats.tpl
sed: -e expression #1, char 49: unknown option to 's'
+ mail -s 'blabla 22-02-2012' toto@mail.fr

Une idée?

Merci



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

6 réponses

  1. Salut zipe31,

    cela fonctionne parfaitement. Je te remercie encore.

    Bonne journée
    1. Contributeur
      De rien ;-))
  2. Merci zipe31,

    je teste demain et je te tiens au courant.

    Bonne soirée.
    1. Contributeur
      Bon apparemment "sed" n'aime pas trop la substitution avec une variable ayant des sauts de ligne (s#\bEVENT\b#${EVENT}#) ;-((.

      Donc je te propose de remplacer cette ligne par :
      s#\bEVENT\b#cat event_mois_${DATE}.txt#e

      Ici le flag "e" (pour exécuter) va demander à "sed" de substituer le motif par le résultat de la commande "cat event_mois_${DATE}.txt".

      $ echo "${DATE}"
      22-02-2012
      
      $ cat event_22-02-2012.txt 
      50|01/02/2010 00:00:00 CET
      77|01/03/2010 00:00:00 CET
      62|01/04/2010 00:00:00 CEST
      48|01/05/2010 00:00:00 CEST
      44|01/06/2010 00:00:00 CEST
      41|01/07/2010 00:00:00 CEST
      42|01/08/2010 00:00:00 CEST
      66|01/09/2010 00:00:00 CEST
      
      $ echo "${NSOL}"
      256489
      
      $ cat plop 
      Nous sommes le DATE
      Voici les évenements :
      EVENT
      Et voici le contenu de la variable (nsol) : NSOL
      
      
      $ sed "s#DATE#${DATE}#
      s#EVENT#cat event_${DATE}.txt#e
      s#NSOL#${NSOL}#
      " plop
      Nous sommes le 22-02-2012
      Voici les évenements :
      50|01/02/2010 00:00:00 CET
      77|01/03/2010 00:00:00 CET
      62|01/04/2010 00:00:00 CEST
      48|01/05/2010 00:00:00 CEST
      44|01/06/2010 00:00:00 CEST
      41|01/07/2010 00:00:00 CEST
      42|01/08/2010 00:00:00 CEST
      66|01/09/2010 00:00:00 CEST
      Et voici le contenu de la variable (nsol) : 256489
      
      
      $

      ;-))
      1. Voici le contenu des variables :

        DATE=22-02-2012

        EVENT =50|01/02/2010 00:00:00 CET
        77|01/03/2010 00:00:00 CET
        62|01/04/2010 00:00:00 CEST
        48|01/05/2010 00:00:00 CEST
        44|01/06/2010 00:00:00 CEST
        41|01/07/2010 00:00:00 CEST
        42|01/08/2010 00:00:00 CEST
        66|01/09/2010 00:00:00 CEST
        etc..

        NSOL=256489
        1. Salut,

          Même problème mais avec une erreur différente :

          sed: -e expression #1, char 66: unterminated 's' command

          Merci

          L'accès au savoir est la première liberté que chaque homme devrait avoir.
          1. Contributeur
            Peux-tu afficher le contenu des variables "${DATE}", "${EVENT}" et "${NSOL}" ?
        2. Contributeur
          Salut,

          s/\bEVENT\b/
          82|01/01/2012
          80|01/02/2012 00:00:00 CET/ 

          Apparemment dans ta chaîne de remplacement il y a des slashs (/) ;-((

          Remplace donc le caractère délimiteur (caractère slash par défaut) de la commande substitution, par un autre caractère (le dièse "#" par exemple) :

          sed -e "
          s#\bDATE\b#${DATE}#
          s#\bEVENT\b#${EVENT}#
          s#\bNSOL\b#${NSOL}#
          " stats.tpl  | mail -s "blabla ${DATE}" toto@mail.fr

          ;-))