Script de substitution (vi et fin de ligne)

chasteigne Messages postés 8 Statut Membre -  
jipicy Messages postés 41342 Statut Modérateur -
Bonjour,

j'ai écris un petit script pour créer un fichier de requette sql à partir d'un fichier .csv (export excel avec des séparateurs ";") :

#!/usr/bin/ksh

vi $csv_file << EOT
:%s/;/', '/g
:%s/^/insert into TABLE ('/
:%s/?/ /g
:%s/^M/');/
:write sql_file
EOT
exit 0

La ligne sensée substituer les fins de lignes en " '); " n'est pas lu correctement ("Input read error").
Alors que les autres substitutions marchent; et si je tape cette commande dans vi avec le même fichier cela marche...
A voir également:

4 réponses

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

Et avec sed :
sed -i.bak "
s/;/','/g
s/^/insert into TABLE ('/
s/?//g
s/^M/');/
" sql_file
Même si le "-i.bak" est sensé faire un backup du fichier original, teste avant sur un fichier bidon ;-))
0
chasteigne Messages postés 8 Statut Membre
 
merci,

mais en faite l'option -i n'a pas l'air de passer
0
chasteigne Messages postés 8 Statut Membre
 
ce qui est étonnant c'est que quand je tape la commande la commande directement dans vi, cela marche.
(j'ai essayé d'écrire " ^M " ou comme dans la commande " [Ctrl+V] puis Entrée " )
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
ou comme dans la commande " [Ctrl+V] puis Entrée "
Attention c'est CTRL V + CTRL M pour obtenir ^M...
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Alors il te faut passer par un fichier temporaire :
sed 'blablabla' < fichier.in > fichier.out
Sinon ça à l'air de marcher ?

Sans l'option -i essaie :
sed  "

s/;/','/g
s/^/insert into TABLE ('/
s/?//g
s/^M/');/
" sql_file | cat -A
et vois déjà si les fins de lignes ont été modifiées...

PS. Ne pas tenir compte des sauts de lignes (bug du site) ;-((
0