Erreur SED dans un script Shell

pcsystemd Messages postés 734 Statut Membre -  
pcsystemd Messages postés 734 Statut Membre -
Bonjour,
tout d'abord la portion de mon script en rapport avec mes erreurs :
#connexion et exportation la liste 
sql.sh -t 10 -H $DHOST -d $DNAME -u $DUSER -p $DPWD -c "${CMDSQL}" -o "${OUTFILESQL}" -l $LOGSQL

#Traitement du fichier ${OUTFILESQL}
sed "/^/{s/.*/INSERT IGNORE INTO matable1 (activ,mail) VALUES (1,'&');\n\INSERT INTO matable2 (id,tid) VALUES(LAST_INSERT_ID(),507);/}" ${EXPORTFILE} > ${IMPORTFILE}

sed -e '1i\BEGIN;' ${IMPORTFILE} > ${INSERTFILE}

#Connexion SFTP sur serveur
sftp nomserveur <<EOF
put ${INSERTFILE}
quit
EOF

#Connexion SSH et insert en base 
ssh nomserveur <<EOF
mysql --user="$USER" --password="$PASS" $BASE} < ${INSERTFILE} 2>> ${LOGINSERTSQL} || echo "Echec de connexion a la BD du ${DATE}"  > ${LOG}
exit
EOF


et voila les erreur que j'ai a l'execution du script :
+ sed '/^/{s/.*/INSERT IGNORE INTO matable1 (activ,mail) VALUES (1,'\''&'\'');\n\INSERT INTO matable2 (id,tid) VALUES(LAST_INSERT_ID(),507);/}' /monrepertoire/monfichier.sql
sed: -e expression #1, char 162: Unknown option to 's'
+ sed -e '1i\BEGIN;'  /monrepertoire/monfichier.sql
sed: -e expression #1, char 4: Extra characters after command


Une idée?

Merci
A voir également:

5 réponses

jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,


Pour la 1ère erreur, j'ai l'impression qu'il y a soucis avec les quotes, et qu'il n'arrive pas à délimiter la fin de ton expression. L'expression entière contient 138 caractères, et l'erreur se situe au 162 ème caractère, ce qui me fait dire que les quotes sont à l'origine du problème...

Essaie d'écrire la même expression sans les quotes, du style :
sed '/^/{s/.*/INSERT IGNORE INTO matable1 (activ,mail) VALUES (1,blabla);\n\INSERT INTO matable2 (id,tid) VALUES(LAST_INSERT_ID(),507);/}' /monrepertoire/monfichier.sql
et voir si ça passe...


Pour la 2nd, essaie comme ça :
sed -e '1i\
BEGIN;'  /monrepertoire/monfichier.sql

0
pcsystemd Messages postés 734 Statut Membre 23
 
Merci jipicy.

Cela a résolu une erreur mais pas la premiere. Voici l'erreur :

+ sed '/^/{s/.*/INSERT IGNORE INTO matable1 (activ,mail) VALUES (1,&);\n\INSERT INTO matable2 (id,tid) VALUES(LAST_INSERT_ID(),507);/}' /monrepertoire/monfichier.sql
sed: -e expression #1, char 160: Unknown option to 's'


Ce qui est curieux c'est que si je créais en test un script shell uniquement avec cette ligne de commande cela fonctionne parfaitement . Juste pour le détail dans mon script j'ai des doubles cotes :

sed "/^/{s/.*/INSERT IGNORE INTO matable1 (activ,mail) VALUES (1,&);\n\INSERT INTO matable2 (id,tid) VALUES(LAST_INSERT_ID(),507);/}"


Peux être une piste?
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Arf ;-((

VALUES (1,&);VALUES (1,&);
Il faut protéger l'éperluette sans quoi elle est interprétée par "sed" et remplacer par tout ce qui matche ".*" dans le motif ;-(((
VALUES (1,\&);VALUES (1,&);
0
pcsystemd Messages postés 734 Statut Membre 23
 
Toujours pareil erreur même en protégeant l'eperluette :

sed: -e expression #1, char 161: Unknown option to 's'

Merci
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Tu peux me faire passer ton fichier "sql" (en MP si nécessaire) que je vois ce qu'il en est en live ;-))
0

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

Posez votre question
pcsystemd Messages postés 734 Statut Membre 23
 
C'est fait jipicy je t'ai mis en MP le contenu de mon fichier sql que SED doit traité ainsi que mon script shell en entier comme cela tu as tout.

Merci
0