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 :

[sed] Interprétation des accolades


Sujet :

Shell et commandes GNU

  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2003
    Messages
    554
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 554
    Par défaut [sed] Interprétation des accolades
    Bonjour,
    Voici une chaîne de caractères '{"guid":"roo' que j'essaie d'interpréter avec SED.
    En fait, j'essaie simplement d'ajouter un saut de ligne après mon accolade ouvrante.
    J'utilise donc la commande echo '{"guid":"roo' | sed '/{/a' dans un terminal linux.

    J'ai essayé les 3 syntaxes sed '/{/a' et sed '/\{/a' et sed '/\\{/a', mais aucune ne fonctionne.
    SED génère chaque fois une erreur, que ce soit sans backslash, avec un simple ou avec un double backslash.
    Est-ce que quelqu'un aurait une idée ?

    Enicnath

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 801
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par enicnath Voir le message
    En fait, j'essaie simplement d'ajouter un saut de ligne après mon accolade ouvrante.
    echo '{"guid":"roo' |sed -e "s/{/{\n/g".

    Le "g" final n'est pas obligatoire (et peut-être même, si on y réfléchit mieux, pourrait presque être enlevé). A toi de voir.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    Bonjour

    Beaucoup de choses à dire

    Citation Envoyé par enicnath Voir le message
    J'utilise donc la commande echo '{"guid":"roo' | sed '/{/a' dans un terminal linux.
    Dans tous tes scripts sed, il manque la commande s qui veut dire "substitution". Du coup, l'interpréteur ne sait pas ce que tu veux.
    Si tu commences par une oblique (slash / ), c'est alors l'adresse d'une ligne correspondant à l'expression rationnelle (=regular expression = regex). Ici, l'interpréteur comprend "pour une ligne contenant une accolade, ajouter". Effectivement le a est la commande "ajouter". Mais tu ne dis jamais quoi. Et le message d'erreur est très explicite. Il faut le lire !

    Citation Envoyé par enicnath Voir le message
    J'ai essayé les 3 syntaxes sed '/{/a' et sed '/\{/a' et sed '/\\{/a', mais aucune ne fonctionne.
    Quand l'accolade est simple, c'est un caractère. Quand elle est échappée par une contre-oblique (antislash \ ), c'est une indicateur de quantité de l'élément précédent. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ grep --color 'm\{5,7\}' <<< "mmm"
    $ grep --color 'm\{5,7\}' <<< "mmmmm"
    mmmmm
    $ grep --color 'm\{5,7\}' <<< "mmmmmmm"
    mmmmmmm
    $ grep --color 'm\{5,7\}' <<< "mmmmmmmmm"
    mmmmmmmmm
    • sed '/{/a' , on l'a déjà décortiqué.
    • sed '/\{/a' , tu indiques la quantité d'élément précédent mais il n'y a rien avant.
    • sed '/\\{/a' , tu désignes une ligne contenant une contre-oblique suivie d'une accolade. Toujours pour ajouter ... on-ne-sait-quoi.

    Pas étonnant que l'interpréteur hurle dans chaque cas.

    Nota bene : Même si tu avais effectivement mis le retour à la ligne après le "a", il y aurait eu un problème. "a" ajoute après la ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ echo '{"guid":"roo' | sed '/{/a
    > '
    {"guid":"roo
     
    $
    Un retour à la ligne a bien été ajouté. Mais après la ligne. Pas après l'accolade. Il faut bien une substitution.

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 335
    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 335
    Par défaut
    Pour le fun, juste avec grep:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo '{"guid":"roo"}' | grep -Po '{|.[^}]*|}'
    {
    "guid":"roo"
    }

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2003
    Messages
    554
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 554
    Par défaut
    En effet, je croyais que l'option 'a' insérait une ligne après le motif identifié.
    Non, il insère une ligne après la ligne contenant le motif identifié. D'où la nécessité d'utiliser l'option 's' et d'ajouter '\n' à l'endroit désiré.
    Merci pour vos réponses ; je considère que la discussion est résolue.

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

Discussions similaires

  1. Utilité des accolades dans PHP
    Par laxe13 dans le forum Langage
    Réponses: 5
    Dernier message: 27/09/2008, 23h34
  2. Utilité des accolades
    Par pelloq1 dans le forum Débuter
    Réponses: 1
    Dernier message: 25/05/2008, 00h02
  3. [SWI-Prolog] Rôle des accolades
    Par t-student dans le forum Prolog
    Réponses: 8
    Dernier message: 26/04/2008, 07h59
  4. taille des accolades
    Par romanticide dans le forum Mise en forme
    Réponses: 1
    Dernier message: 12/02/2008, 09h11
  5. [XSLT] Utilisation des {accolades}
    Par azertyman dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 27/09/2006, 15h59

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