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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 134
    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 134
    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 134
    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 134
    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 102
    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 102
    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 102
    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 102
    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.

+ 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