Erreur SED scritp Bash

Résolu/Fermé
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 - 17 mars 2011 à 08:26
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 - 22 mars 2011 à 11:57
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
17 mars 2011 à 12:17
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 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 22
17 mars 2011 à 14:24
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
17 mars 2011 à 19:00
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 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 22
Modifié par pcsystemd le 18/03/2011 à 07:06
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
18 mars 2011 à 07:35
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 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 22
18 mars 2011 à 09:04
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
18 mars 2011 à 09:15
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 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 22
18 mars 2011 à 10:02
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
18 mars 2011 à 10:24
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 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 22
18 mars 2011 à 11:29
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
18 mars 2011 à 11:40
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 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 22
18 mars 2011 à 16:54
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
18 mars 2011 à 17:11
Essaye comme ça :

UTIT="$(cat ${TMPDIR}/ut_tr21_${DATE}.lst)" 
0
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 22
21 mars 2011 à 11:16
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
21 mars 2011 à 11:22
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 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 22
22 mars 2011 à 11:57
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