Script de substitution (vi et fin de ligne)
chasteigne
Messages postés
8
Statut
Membre
-
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
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...
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...
Configuration: SunOS 5.8
4 réponses
-
Salut,
Et avec sed :sed -i.bak " s/;/','/g s/^/insert into TABLE ('/ s/?//g s/^M/');/ " sql_fileMême si le "-i.bak" est sensé faire un backup du fichier original, teste avant sur un fichier bidon ;-))
-
-
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 " ) -
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 "
et vois déjà si les fins de lignes ont été modifiées...
s/;/','/g
s/^/insert into TABLE ('/
s/?//g
s/^M/');/
" sql_file | cat -A
PS. Ne pas tenir compte des sauts de lignes (bug du site) ;-((