IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Find&Replace dans un .sql => '0,002' en 0.002


Sujet :

Shell et commandes GNU

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Par défaut Find&Replace dans un .sql => '0,002' en 0.002
    Salut à tous,

    voici ma problématique :
    J'ai un fichier .sql avec un paquet d'instructions de type insert générés à partir de sql developper.
    Sauf que le formattage des nombres décimaux ne me va pas il m'a généré des lignes de la forme :

    insert into TOTO (a,b,c) values ('titre','0,025',5);

    Et je souhaiterai transformer dans ce fichier, tous les décimaux (qui ont plus ou moins de précision après la virgule) en :
    - remplaçant la "," par un "."
    - supprimant les simple quote

    Pour avoir :

    insert into TOTO (a,b,c) values ('titre',0.025,5);

    Pour le moment j'ai la commande suivante qi remplace les "," par des ".":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/\([0-9]\),\([0-9]\)/\1.\2/g' monFichier.sql
    Mais j'arrive pas à faire le reste

    Quelqu'un voit comment faire ?


    EDIT : pour la 2e partie qui supprime les quote , je le fais via notepad++ là avec l'expression : '([0-9]+(\,[0-9]+))' et \1 dans le replacement sauf qu'impossible de le faire fonctionner dans un shell

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Tu as essayé comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "s/'\([0-9]\),\([0-9]\)'/\1.\2/g" monFichier.sql
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Par défaut
    Salut,

    ça fait rien du tout

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "'COM','12826,41','MIGR'" | sed "s/'\([0-9]+\),\([0-9]+\)'/\1.\2/g"

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Et là ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "insert into TOTO (a,b,c) values ('titre','0,025',5);" | sed -e "s/'\([0-9]\{1,\}\),\([0-9]\{1,\}\)'/\1.\2/g"
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Citation Envoyé par erox44 Voir le message
    ça fait rien du tout

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "'COM','12826,41','MIGR'" | sed "s/'\([0-9]+\),\([0-9]+\)'/\1.\2/g"
    Chez moi non plus ça ne change rien. Je suis sous macos (qui semble être plus posix que linux).

    Manifestement, il ne comprend pas le "+", mais il comprend très bien le "*"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo "'COM','12826,41','MIGR'" | sed "s/'\([0-9][0-9]*\),\([0-9][0-9]*\)'/\1.\2/g"
    'COM',12826.41,'MIGR'
    Citation Envoyé par al1_24 Voir le message
    Et là ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "insert into TOTO (a,b,c) values ('titre','0,025',5);" | sed -e "s/'\([0-9]\{1,\}\),\([0-9]\{1,\}\)'/\1.\2/g"
    Ça aussi ça marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo "insert into TOTO (a,b,c) values ('titre','0,025',5);" | sed -e "s/'\([0-9]\{1,\}\),\([0-9]\{1,\}\)'/\1.\2/g"
    insert into TOTO (a,b,c) values ('titre',0.025,5);

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Par défaut
    C'est nickel ça fonctionne avec la dernière version , merci !

    Si en plus ça pouvait gérer les décimaux négatif du style '-88.999' ce serait top :p


    EDIT : version finale =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed -e "s/'\([-]\)\{0,1\}\([0-9]\{1,\}\),\([0-9]\{1,\}\)'/\1\2.\3/g"

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,
    Citation Envoyé par jack-ft Voir le message
    Chez moi non plus ça ne change rien. Je suis sous macos (qui semble être plus posix que linux).

    Manifestement, il ne comprend pas le "+"
    Essaye en protégeant le "+" => "\+" : echo "'COM','12826,41','MIGR'" | sed "s/'\([0-9]\+\),\([0-9]\+\)'/\1.\2/g"



    @erox44 : sed "s/'\(-*[0-9]\+\),\([0-9]\+\)'/\1.\2/g" devrait gérer le signe négatif.

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Essaye en protégeant le "+" => "\+" : echo "'COM','12826,41','MIGR'" | sed "s/'\([0-9]\+\),\([0-9]\+\)'/\1.\2/g"
    Non, ça ne change rien.

    Par contre, avec l'option "-E" et en déquotant les parenthèses:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ echo 'aaabbbcccddd' | sed -E 's/([bc]+)/_\1_/'
    aaa_bbbccc_ddd
     
    $ man sed
         -E      Interpret regular expressions as extended (modern) regular expressions rather than basic regular expressions (BRE's).  
    The re_format(7) manual page fully describes both formats.

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Non, ça ne change rien.
    Chez moi (Linux Mint 17.3 Rosa) ça change tout avec sed (GNU sed) 4.2.2.

    Par contre, avec l'option "-E" et en déquotant les parenthèses
    Depuis toujours sur Gnu/linux, c'est l'option "-r" qui permet ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    -r, --regexp-extended
     
                  use extended regular expressions in the script.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "'COM','12826,41','MIGR','-12826,41'" | sed -r "s/'(-*[0-9]+),([0-9]+)'/\1.\2/g"
    'COM',12826.41,'MIGR',-12826.41

  10. #10
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Chez moi (Linux Mint 17.3 Rosa) ça change tout avec sed (GNU sed) 4.2.2.
    Effectivement, les commandes proposées marchent avec le GNU sed:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ echo 'aaabbbcccddd' | gsed -e 's/\([bc]+\)/_\1_/'
    aaabbbcccddd
     
    $ echo 'aaabbbcccddd' | gsed -e 's/\([bc]\+\)/_\1_/'
    aaa_bbbccc_ddd
     
    $ gsed --version
    gsed (GNU sed) 4.4

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Access] Problème avec REPLACE dans SQL
    Par nikolla dans le forum Langage SQL
    Réponses: 7
    Dernier message: 12/01/2011, 13h47
  2. Utilisation de REPLACE() dans un programme PL/SQL
    Par Djene dans le forum PL/SQL
    Réponses: 8
    Dernier message: 10/12/2009, 11h30
  3. Replace dans requête SQL Access 2000
    Par romulus34 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 12/03/2009, 11h55
  4. Faire un Find and Replace dans un DataGridView
    Par Contrec dans le forum C#
    Réponses: 5
    Dernier message: 29/08/2007, 09h40
  5. find and replace dans word
    Par Thargor dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 21/06/2006, 15h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo