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 :

Utiliser sed avec deux fichiers


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Webdesigner
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Par défaut Utiliser sed avec deux fichiers
    Bonjour,

    J'ai un petit soucis.
    J'essaie d'utiliser sed pour insérer du texte à un endroit précis d'un fichier. Voici mon fichier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    {
      "test_data": [
        {
          "id": "1",
          "pm": "30",
          "mp": "40"
        }
      ],
      "test": [
        "id",
        "pm",
        "mp"
      ]
    }
    J'aimerais insérer du texte après l’accolade de test_data. Le fichier peut contenir plus ou moins d'information. Je suis donc arriver à cette commande qui fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "/^[[:blank:]]*\"test_data\": \[$/,/^[[:blank:]]*],*$/ {s/^[[:blank:]]*}$/&test /}" myfile
    Qui donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    {
      "test_data": [
        {
          "id": "1",
          "pm": "30",
          "mp": "40"
        }test
      ],
      "test": [
        "id",
        "pm",
        "mp"
      ]
    }
    Super.
    Maintenant au lieu d'ajouter du texte, j'aimerais ajouter le contenu d'un fichier à la place de test. Je suis donc parti sur quelque chose de ce genre là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "/^[[:blank:]]*\"test_data\": \[$/,/^[[:blank:]]*],*$/ {s/^[[:blank:]]*}$/&$(cat myAnotherFile) /}" myfile
    Non fonctionnel. J'ai donc fait des recherches, et je suis tombé sur le /r qui permet d'insérer le contenu d'un fichier.
    Mais pour être honnête, je ne sais pas comment insérer ce /r dans ma commande ci-dessus ....

    Quelqu'un a une idée ?
    Merci d'avance !
    Cordialement

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    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 986
    Par défaut
    Je ne sais pas trop à quoi ressemble ton autre fichier, mais l'outil pour manipuler du json (ce qu'est ton fichier d'origine) est jq plutôt que sed.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Par défaut
    Bonjour,
    La commande r n'insére pas en bout de ligne mais sur une ou plusieurs lignes séparées
    Tu peux essayer comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e "/^[[:blank:]]*\"test_data\": \[$/,/^[[:blank:]]*],*$/ {/^[[:blank:]]*}$/r myAnotherFile" -e "}" myfile
    affichage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
          "mp": "40"
        }
    l'ajout
    ici
      ],
    ...
    Cordialement

  4. #4
    Membre régulier
    Homme Profil pro
    Webdesigner
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Par défaut
    Bonjour !

    Merci pour ta réponse !
    Mais il n'y a pas moyen d'écrire sur la même ligne que celle de } ?

    Par exemple si mon contenu du fichier c'est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    test,
    ceci
    est
    un
    test
    Cela donnerait:

    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
    {
      "test_data": [
        {
          "id": "1",
          "pm": "30",
          "mp": "40"
        }test,
    ceci
    est
    un
    test
      ],
      "test": [
        "id",
        "pm",
        "mp"
      ]
    }
    EDIT:

    J'ai cherché une alternative en faisant un cat de mon fichier dans ma variable:

    J'affiche ensuite ma variable à la place de text dans ma commande d'origine. Malheureusement j'ai une erreur quand je fais ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed: -e expression #1, char 73: unterminated `s' command
    Et je ne comprends pas .. Car si je fais a="jjjjjjjj" et que j'affiche ma variable, cela fonctionne. Mais pas si ça contient le cat d'un fichier.

  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 Sparkk Voir le message
    Mais il n'y a pas moyen d'écrire sur la même ligne que celle de } ?
    Il semblerait que ton fichier soit au format "json", non?
    Or, ce format ne tient pas compte des espaces ni des retours à la ligne (sauf entre guillemets, bien sûr).
    Donc, afin que nous puissions comprendre ton réel besoin, peux-tu nous dire si tu as une bonne raison de vouloir absolument écrire au bout de la ligne plutôt que sur la ligne suivante?

  6. #6
    Membre régulier
    Homme Profil pro
    Webdesigner
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Par défaut
    Salut !

    C'est mélangé en fait, il y a un peu de tout. Mais ce n'est pas vraiment du JSON. Il faut impérativement que j'insère sur la même ligne car c'est comme ça que je souhaite faire
    Du coup j'ai edit mon message.

    "

    J'ai cherché une alternative en faisant un cat de mon fichier dans ma variable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a=$(cat file)
    sed "/^[[:blank:]]*\"testing\": \[$/,/^[[:blank:]]*],*$/ {s/^[[:blank:]]*}$/&`echo $a`/}" $1
    J'affiche ensuite ma variable à la place de text dans ma commande d'origine. Malheureusement j'ai une erreur quand je fais ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed: -e expression #1, char 73: unterminated `s' command
    Et je ne comprends pas .. Car si je fais a="jjjjjjjj" et que j'affiche ma variable, cela fonctionne. Mais pas si ça contient le cat d'un fichier.

    "

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 16/11/2009, 16h27
  2. Réponses: 3
    Dernier message: 24/04/2009, 09h12
  3. Réponses: 1
    Dernier message: 22/11/2008, 20h50
  4. [VB6] Utiliser MSChart avec un fichier text
    Par bandy dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 30/03/2006, 14h07
  5. Mise en réseau avec deux fichiers *.mdb
    Par Rouge_XIII dans le forum Access
    Réponses: 6
    Dernier message: 08/12/2005, 19h09

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