Formater un fichier avec SED

Résolu
pcsystemd Messages postés 734 Statut Membre -  
zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

mon fichier a traiter contient plusieurs lignes de la sorte :

name='L'immobilier'
name='l'occitan'
name='Cap'horn'
name='CAP'Horn'

et j'ai besoin de formater mon fichier de la sorte afin d'echapper ma côte ' pour des INSERT sql en utilisant la syntaxe E''(je ne sais pas encore exactement la bonne syntaxe) :

name='LE'''immobilier'
name='lE'''occitan'
name='CapE'''horn'
name='CAPE'''Horn'

J'ai essayé cela avec SED :

sed -e "s/[a-zA-Z]'/E'''/g" fichier


mais cela ne fonctionne pas correctement.

Une idée?

Merci



--
L'accès au savoir est la première liberté que chaque homme devrait avoir.

4 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    $ cat plop
    name='L'immobilier'
    name='l'occitan'
    name='Cap'horn'
    name='CAP'Horn'
    
    $ sed "s/'/E\"&/2" plop
    name='LE"'immobilier'
    name='lE"'occitan'
    name='CapE"'horn'
    name='CAPE"'Horn'


    ;-))
    0
  2. pcsystemd Messages postés 734 Statut Membre 23
     
    Merci zipe31 . Tu peux juste m'expliquer a quoi correspond &/2 ?
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Le & est le méta caractère qui sert à reprendre la totalité du motif recherché dans la 1ère partie de la substitution. Ça évite de tout récrire. Ici ce n'était pas bien long (une quote simple) mais des fois c'est très appréciable ;-))

      Quand au "2", ça demande de ne remplacer que la 2ème occurrence du motif recherché. Donc on n'effectue une substitution que sur la 2nd quote simple rencontrée.

      Voir dans la FAQ sur "sed" tout ça y est expliqué ;-))
      SED - Le méta-caractère "&"
      SED - Les flags (Nième occurrence)
      0
  3. pcsystemd Messages postés 734 Statut Membre 23
     
    Ok Merci beaucoup. Mais de la j'ai une interrogation car si j'ai mes lignes a inserer de la sorte :

    insert into (bla,bla,bla) values ('1','jkl','L'immobilier');
    ou bien
    insert into (bla,bla,bla,bla,bla) values ('1','jkl','hui','L'immobilier','cap'horn');

    je ne peux pas utiliser &/2 ?

    De plus et je suis coupable le formatage que je dois avoir est :

    name=E'L\'immobilier'
    name=E'Cap\'horn'

    et non

    name='LE"'immobilier'
    name='CapE"'horn'

    Merci

    L'accès au savoir est la première liberté que chaque homme devrait avoir.
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Au cas ou concernant le formatage :

      sed "s/'/E&/1;s/'/\\\&/2"


      Après c'est clair que s'il y a toute une ribambelle de quotes, c'est pas gagné ;-(
      0
  4. pcsystemd Messages postés 734 Statut Membre 23
     
    Bon je me suis débrouiller autrement. Merci pour ton aide.
    0