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 :

Modification de fichier avec sed


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Décembre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2017
    Messages : 53
    Points : 32
    Points
    32
    Par défaut Modification de fichier avec sed
    Salut tout le monde,

    Alors voilà j'ai un fichier au format JSON que j'aimerais modifier de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    [
       {
          "coordinates": {
             "timestamp": 1517213297
          }, 
          "identification": {
             "producer": "reseau"
          }, 
          "meta": {
             "name": "test", 
             "tags": "{"id" : "081400"}"
          }, 
          "values": "{ "default" : 2.18 }"
       }, 
       {
          "coordinates": {
             "timestamp": 1517213297
          }, 
          "identification": {
             "producer": "reseau"
          }, 
          "meta": {
             "name": "test", 
             "tags": "{"id" : "073700"}"
          }, 
          "values": "{ "default" : 1.3 }"
       }, 
       {
          "coordinates": {
             "timestamp": 1517213297
          }, 
          "identification": {
             "producer": "reseau"
          }, 
          "meta": {
             "name": "test", 
             "tags": "{"id" : "080800"}"
          }, 
          "values": "{ "default" : 2.9 }"
       }
    ]
    et j'aimerais faire en sorte de supprimer les guillemets qui entoure la partie id et la partie default, en effet, à cause de ces guillemets, le JSON est invalide.

    J'aimerais donc que ça ressemble à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    [
       {
          "coordinates": {
             "timestamp": 1517213297
          }, 
          "identification": {
             "producer": "reseau"
          }, 
          "meta": {
             "name": "test", 
             "tags": {"id" : "081400"}
          }, 
          "values": { "default" : 2.18 }
       }, 
       {
          "coordinates": {
             "timestamp": 1517213297
          }, 
          "identification": {
             "producer": "reseau"
          }, 
          "meta": {
             "name": "test", 
             "tags": {"id" : "073700"}
          }, 
          "values": { "default" : 1.3 }
       }, 
       {
          "coordinates": {
             "timestamp": 1517213297
          }, 
          "identification": {
             "producer": "reseau"
          }, 
          "meta": {
             "name": "test", 
             "tags": {"id" : "080800"}
          }, 
          "values": { "default" : 2.9 }
       }
    ]
    Je n'ai mis qu'une partie du fichier mais il faut imaginer que ça ne se limite pas qu'à cela.

    J'ai fais des recherches au niveau de sed / awk / cut et j'ai tenté quelques commandes, mais rien de très concluants.

    Je ne sais même pas si sed est suffisamment puissant pour faire ce que je demande...

    Bonne journée en espérant avoir des réponses à mon problème

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '/"\(id\|default\)"/{ s/"{/{/;s/}"/}/}'
    MAIS, il faut que le format soit bien celui montré : s'il y a d'autres accolades sur la ligne, seul la première sera modifiée. :/
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Décembre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2017
    Messages : 53
    Points : 32
    Points
    32
    Par défaut
    Merci de cette réponse très rapide,

    effectivement le fichier que j'ai mis n'est pas tout à fait celui que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    [
       {
          "coordinates": {
             "timestamp": 1517213297
          }, 
          "identification": {
             "producer": "reseau"
          }, 
          "meta": {
             "name": "test", 
             "tags": "{'id' : '081400'}"
          }, 
          "values": "{ 'default' : 2.18 }"
       }, 
       {
          "coordinates": {
             "timestamp": 1517213297
          }, 
          "identification": {
             "producer": "reseau"
          }, 
          "meta": {
             "name": "test", 
             "tags": "{'id' : '073700'}"
          }, 
          "values": "{ 'default' : 1.3 }"
       }, 
       {
          "coordinates": {
             "timestamp": 1517213297
          }, 
          "identification": {
             "producer": "reseau"
          }, 
          "meta": {
             "name": "test", 
             "tags": "{'id' : '080800'}"
          }, 
          "values": "{ 'default' : 2.9 }"
       }
    ]
    En effet, sur mon post j'ai mis des " au lieu des ' qui sont actuellement dans mon fichier car je ne pensais pas que la commande se ferait en fonction du nombre de " présents.

    Excusez-moi ...

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '/'\''\(id\|default\)'\''/{ s/"{/{/;s/}"/}/}'
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Décembre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2017
    Messages : 53
    Points : 32
    Points
    32
    Par défaut
    Impressionnant !

    Merci beaucoup !

    Topic résolu.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Décembre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2017
    Messages : 53
    Points : 32
    Points
    32
    Par défaut
    Quitte à avoir un expert de sed, du coup j'aimerais remplacer les ' par des ".

    Voici la commande à laquelle je pensais pour faire cette modification :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed 's/'/\"/' fichier
    Si tu avais moyen de m'aider juste pour cette commande, après je ne t'embête plus promis !

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Décembre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2017
    Messages : 53
    Points : 32
    Points
    32
    Par défaut
    Une âme charitable pour m'aider s'il vous plaît ?

    J'ai trouver une solution alternative avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cat fichier | tr "'" '"'
    Le problème d'utiliser tr c'est qu'il faut recréé un fichier pour que le changement sois valable. Or, ici j'ai envie d'écraser les ' et de mettre des " à la place.

    Autre idée ne fonctionnant pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed "s/\'/\"/g" fichier

  8. #8
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Bonjour,

    Méthode N_BaH:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '/'\''\(id\|default\)'\''/{ s/"{/{/;s/}"/}/;s/'\''/"/g}'
    Autre façon (code caractère en octal) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '/\o047\(id\|default\)\o047/{ s/"{/{/;s/}"/}/;s/\o047/"/g}'
    Attention, ici, je modifie tous les ' de la ligne.

    PS: j'ai eu la flemme de les tester...
    Cordialement.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Décembre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2017
    Messages : 53
    Points : 32
    Points
    32
    Par défaut
    ça marche parfaitement !

    Un grand merci à vous deux, ô grands experts de sed :p !

  10. #10
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Avec jq 1.5 tu peux aussi faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jq '(.[].meta.tags,.[].values)|=(gsub("'"'"'";"\"")|fromjson)' file
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

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

Discussions similaires

  1. modification complexe fichier - awk, sed ?
    Par vpovpo dans le forum Unix
    Réponses: 1
    Dernier message: 19/04/2010, 16h06
  2. modification complexe fichier - awk, sed ?
    Par vpovpo dans le forum Linux
    Réponses: 1
    Dernier message: 19/04/2010, 16h00
  3. Probleme de modification de fichier avec le lecteur wmp
    Par olafviking dans le forum Windows Forms
    Réponses: 0
    Dernier message: 26/01/2010, 23h17
  4. copie contenu d'un fichier dans un autre fichier avec sed
    Par zorooo dans le forum Shell et commandes GNU
    Réponses: 14
    Dernier message: 18/01/2010, 09h17

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