Commande sed bash

Résolu
powerebonn -  
 Dbldou -
Bonjour,
je voudrais par exemple pour :
<text:h text:style-name="bloublou" text:outline-level="1"><balise aléatoire></balise></text:h><text:h text:style-name="bloublou" text:outline-level="2"><balise aléatoire2></balise><balise aléatoire1></balise></text:h>
afficher
<h1><balise aléatoire></balise></h1><h2><balise aléatoire2></balise><balise aléatoire1></balise></h2>


Pour cela, j'utilise la commande sed mais ça ne marche pas quand je fais ça :
baliseh='echo $contenu | sed -e 's/<text:h text:style-name="[^"]*" text:outline-level="\([^"]*\)">\([^*]*\)<\/text:h>'/<h\1>\2<\/\1>/g'

En fait le résultat de cette commande fait <h1></h1> il avale tout le contenu entre les balises comme s'il ne repérait pas en premier obstacle </text:h> car il va prendre la dernière balise </text:h> pour fermer le h.
Merci de votre aide. Nico.

5 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Essaye ça :

    sed -n 's#[^[:digit:]]*"\(.\).>\([^:]*\)</text:h>#<h\1>\2</h\1>#gp'

    ;-))
    0
  2. powerebonn
     
    Bonjour, merci de ta réponse, en fait le fichier n'est pas composé seulement que des balise <text:h> il y en a beaucoup d'autres comme <text:style> dans le fichier lui même, j'ai déjà réussi à traiter ces autres balises mais le text:h bloque car en fait le fichier se présente sous cette forme : <text:span.><text:h.....><text:style>il peut y avoir des numéro ici ou n'importe quel autres balisesblabla</text:style></text:h>Blabla</text:span>
    et pour l'instant j'ai réussi à transformer mais les je voudrais juste afficher les balises h en <h1ou2ou3...>et là de dans tout plein de balise d'un nombre totalement indépendant <text:tada num="4">46 blabla</text:tada></h1ou2ou3..>

    J'ai testé ta solution mais elle n'affiche rien à l'écran.
    Merci de ton aide, =)
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Sur le morceau de texte que tu as donné, cette syntaxe marche :

      $ echo $A
      <text:h text:style-name="bloublou" text:outline-level="1"><balise aléatoire></balise></text:h><text:h text:style-name="bloublou" text:outline-level="2"><balise aléatoire2></balise><balise aléatoire1></balise></text:h>
      
      $ echo $A | sed -n 's#[^[:digit:]]*"\(.\).>\([^:]*\)</text:h>#<h\1>\2</h\1>#gp'
      <h1><balise aléatoire></balise></h1><h2><balise aléatoire2></balise><balise aléatoire1></balise></h2>
      
      $

      Après c'est l'éternel problème, si vous ne nous donnez pas les exemples concrets, il est impossible de pondre une regex optimisée et adéquate ;-((
      0
  3. powerebonn
     
    Désolé de n'avoir pas été assez précis, je vous donne l'exemple complet de ce que j'ai à convertir :
    <text:h text:style-name="Heding20_2" text:outline-level="2"><span class="T1">Texte</span><img src="url.jpg" alt="image"/><span class="T2">Texte</span></text:h><text:h  text:style-name="Heding10_1" text:outline-level="1"><text:p>Le texte</text:p></text:h>


    Voici ce que j'aimerai en faire :
    <h2><span class="T1">Texte</span><img src="url.jpg" alt="image"/><span class="T2">Texte</span></h2><h1><text:p>Le texte</text:p></h1>


    Voilà j'ai essayé de vous expliquer au mieux par un exemple précis ici, merci de votre aide =)
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      $ echo $B
      <text:h text:style-name="Heding20_2" text:outline-level="2"><span class="T1">Texte</span><img src="url.jpg" alt="image"/><span class="T2">Texte</span></text:h><text:h text:style-name="Heding10_1" text:outline-level="1"><text:p>Le texte</text:p></text:h>
      
      $B | sed -n 's#[^_]*_."[^[:digit:]]*"\(.\).>\([^h]*\)</text:h>#<h\1>\2</h\1>#gp'
      <h2><span class="T1">Texte</span><img src="url.jpg" alt="image"/><span class="T2">Texte</span></h2><h1><text:p>Le texte</text:p></h1>
      
      $

      Par contre il ne faut pas que "Texte" ou "Le texte" contienne la lettre "h" ;-((
      0
  4. powerebonn
     
    Aie on ne pourra pas écrire la lettre h dans le texte, c'est assez embêtant, on ne peut pas faire [^</text:h>]* pour s'arrêter à cette balise là snif..
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Avec ça ça devrait le faire :

      sed -n 's#[^_]*_."[^[:digit:]]*"\(.\).>\([^:][^h]*\)</text:h>#<h\1>\2</h\1>#gp'
      ;-))
      0
    2. Dbldou
       
      merci beaucoup beaucoup je chercher la meme chose ^^
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. powerebonn
     
    Super, c'est ça que je cherchais merci! le [^:][^h] voilà ce qui me bloquait la syntaxe!
    0