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   -
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...
Configuration: SunOS 5.8

4 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
  2. chasteigne Messages postés 8 Statut Membre
     
    merci,

    mais en faite l'option -i n'a pas l'air de passer
    0
  3. 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
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      ou comme dans la commande " [Ctrl+V] puis Entrée "
      Attention c'est CTRL V + CTRL M pour obtenir ^M...
      0
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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