Erreur SED scritp Bash

Résolu
pcsystemd Messages postés 702 Date d'inscription   Statut Membre Dernière intervention   -  
pcsystemd Messages postés 702 Date d'inscription   Statut Membre Dernière intervention   -
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


10 réponses

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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pcsystemd Messages postés 702 Date d'inscription   Statut Membre Dernière intervention   23
 
En effet merci de le signaler mais malheureusement l'erreur persiste.

sed: -e expression #1, char 88: unterminated 's' command
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
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
pcsystemd Messages postés 702 Date d'inscription   Statut Membre Dernière intervention   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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
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
pcsystemd Messages postés 702 Date d'inscription   Statut Membre Dernière intervention   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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
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
pcsystemd Messages postés 702 Date d'inscription   Statut Membre Dernière intervention   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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Essaye comme ça :

UTIT="$(cat ${TMPDIR}/ut_tr21_${DATE}.lst)" 
0
pcsystemd Messages postés 702 Date d'inscription   Statut Membre Dernière intervention   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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
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
pcsystemd Messages postés 702 Date d'inscription   Statut Membre Dernière intervention   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