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

Linux Discussion :

[SED] encadrer un bloc avec deux marqueurs


Sujet :

Linux

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 12
    Points : 11
    Points
    11
    Par défaut [SED] encadrer un bloc avec deux marqueurs
    Bonjour,

    Je souhaiterai avec sed passer de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <ta>truc</ta>
    <ta>machin</ta>
    <ta>bidule</ta>
     
    du texte
    du texte
     
    <ta>truc</ta>
    <ta>machin</ta>
    <ta>bidule</ta>
     
    ....
    à

    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
     
    <to>
    <ta>truc</ta>
    <ta>machin</ta>
    <ta>bidule</ta>
    </to>
     
    du texte
    du texte
     
    <to>
    <ta>truc</ta>
    <ta>machin</ta>
    <ta>bidule</ta>
    </to>
     
    ....
    Les blocs ont une taille inconnue à l'avance.

    Je ne suis pas un fan de sed, mais là, je dois l'utiliser. J'ai essayé de mettre en pratique la faq suivante : http://www.linuxtopia.org/online_boo...faq/index.html
    section 4.2* et surtout 4.21. Mais impossible de faire détecter correctement la fin d'un bloc... Peut être que ce n'est pas la piste la plus simple d'ailleurs...

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par .:Spip:. Voir le message
    Bonjour,

    Je souhaiterai avec sed passer de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <ta>truc</ta>
    <ta>machin</ta>
    <ta>bidule</ta>
     
    du texte
    du texte
     
    <ta>truc</ta>
    <ta>machin</ta>
    <ta>bidule</ta>
     
    ....
    à

    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
     
    <to>
    <ta>truc</ta>
    <ta>machin</ta>
    <ta>bidule</ta>
    </to>
     
    du texte
    du texte
     
    <to>
    <ta>truc</ta>
    <ta>machin</ta>
    <ta>bidule</ta>
    </to>
     
    ....
    Les blocs ont une taille inconnue à l'avance.

    Je ne suis pas un fan de sed, mais là, je dois l'utiliser. J'ai essayé de mettre en pratique la faq suivante : http://www.linuxtopia.org/online_boo...faq/index.html
    section 4.2* et surtout 4.21. Mais impossible de faire détecter correctement la fin d'un bloc... Peut être que ce n'est pas la piste la plus simple d'ailleurs...

    Merci d'avance pour votre aide.
    Salut

    Si je comprends bien, la fin d'un bloc se détecte par rapport à la ligne vide. Et le début par rapport à la balise ouvrante en début de ligne.
    Bon, ben déjà sed ne peut rien faire. Trop compliqué pour lui.

    Tu peux le faire en awk (rapide mais faut connaitre la syntaxe) ou simplement rester en shell
    Code bash : 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
    #!/bin/sh
     
    bloc="false"
    (cat fic; echo) |while read lig
    do
            if echo $lig | grep "^<" 1>/dev/null && test "$bloc" = "false"
            then
                    echo "<to>"
                    bloc="true"
            fi
            if test -z "$lig" -a "$bloc" = "true"
            then
                    echo "</to>"
                    bloc="false"
            fi
            echo $lig
    done

    Le echo après le cat fic est important => il permet d'avoir une ligne vide fictive mais permettant de détecter la fin du dernier bloc.

    Voilà, simple et fonctionnel.
    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]

Discussions similaires

  1. [JTable] Cellule avec deux boutons
    Par cherbox dans le forum Composants
    Réponses: 3
    Dernier message: 12/08/2004, 17h26
  2. comment filtrer une table avec deux criteres càd 2 colonnes
    Par athmane2dz dans le forum Bases de données
    Réponses: 7
    Dernier message: 28/07/2004, 15h25
  3. [CR] instruction If avec deux opérations
    Par MaDmAtT dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 19/07/2004, 13h54
  4. Réponses: 10
    Dernier message: 10/06/2004, 16h20
  5. [langage] split avec deux motifs (Newbie)
    Par Raumsog II dans le forum Langage
    Réponses: 2
    Dernier message: 07/06/2004, 09h31

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