Supprimer chaîne de caractères entre <>

Résolu
bob737 Messages postés 157 Statut Membre -  
bob737 Messages postés 157 Statut Membre -
Bonjour,

J'ai un fichier qui contient les éléments suivants:

<name>bucket-ev-srv01<name>
<total_size>1856<total_size>
<total_size_unit>GB<total_size_unit>
<total_objects>26000483<total_objects>
<TagSet>
<bucket_billing_info>

<name>bucket-ev-srv02<name>
<total_size>1783<total_size>
<total_size_unit>GB<total_size_unit>
<total_objects>33156887<total_objects>
<TagSet>

<name>bucket-cas<name>
<vpool_id>urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global<vpool_id>
<total_size>0<total_size>
<total_size_unit>GB<total_size_unit>
<total_objects>8<total_objects>
<TagSet>
<bucket_billing_info>
<bucket_billing_info>

<name>bucket-ev-jrn<name>
<vpool_id>urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global<vpool_id>
<total_size>523<total_size>
<total_size_unit>GB<total_size_unit>
<total_objects>9201066<total_objects>
<TagSet>
<bucket_billing_info>
<bucket_billing_info>

1)Je souhaite garder uniquement les valeurs et donc supprimer tous les éléments <blabla>
2) Puis pour chaque paragraphe, mettre toutes les valeurs sur une ligne.
exemple:
bucket-ev-srv01;1856; GB ;26000483

Merci de votre aide. ;-)

5 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    $ sed -f script.sed fich 
    bucket-ev-srv01;1856;GB;26000483
    bucket-ev-srv02;1783;GB;33156887
    bucket-cas;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;0;GB;8
    bucket-ev-jrn;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;523;GB;9201066


    $ cat script.sed 
    #n

    :z
    $ bx
    N
    /\n$/! bz
    :x
    s/<[^>]*>//g
    s/\n/;/g
    :w
    s/;$//
    t w
    p

    1
  2. bob737 Messages postés 157 Statut Membre
     
    bonjour,

    Est-il possible de convertir le script sed en ligne de commande et avoir une explication car à part s/<[^>]*>//g, je ne comprends pas le reste.

    MErci! ;-)
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      # n(ou -n version en ligne)
      N'afficher que sur demande (commande p en fin de script)

      :z
      On pose une étiquette nommée "z"

      $ bx
      Si dernière ligne (représentée par le signe $), se brancher sur l'étiquette nommée "x"

      N
      On ajoute la ligne suivante à l'espace de travail

      /\n$/! bz
      Si l'espace de travail ne se finit pas (! exprime la négation) par un caractère de saut de ligne (\n), on se branche (commande b) à l'étiquette nommée "z". Èquivalent d'une boucle.

      :x
      On pose une étiquette nommée "x"

      s/<[^>]*>//g
      Commande exécutée si et seulement si l'espace de travail se finit par un caractère de saut de ligne (\n). On supprime tout ce qui se trouve entre les chevrons, chevrons compris.

      s/\n/;/g
      On remplace les saut de ligne par des points virgules

      :w
      On pose une étiquette nommée "w"

      s/;$//
      On supprime un point virgule se trouvant en fin de ligne ($ dans une expression de substitution, représentant la fin de ligne)

      t w
      Si et seulement si (commande "t") la suppression a réussi, on se branche à l'étiquette "w" et on recommence.

      p
      On affiche sur la sortie standard le résultat.



      Quant à la commande sur une seule ligne, ça donne :
      sed -n ':z;$ bx;N;/\n$/! bz;:x;s/<[^>]*>//g;s/\n/;/g;:w;s/;$//;tw;p'
      0
      1. bob737 Messages postés 157 Statut Membre > zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Merci mais malheureusement, ça ne fonctionne pas.
        Je suis sous AIX.
        0
      2. bob737 Messages postés 157 Statut Membre > bob737 Messages postés 157 Statut Membre
         
        sed: 0602-417 The label :z;$ bx;N;/\n$/! bz;:x;s/<[^>]*>//g;s/\n/;/g;:w;s/;$//;tw;p is greater than eight characters.
        0
      3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > bob737 Messages postés 157 Statut Membre
         
        Je suis sous AIX.
        Ben ça fallait le dire d'entrée ;-(

        Essaye avec le fichier de script.
        0
  3. bob737 Messages postés 157 Statut Membre
     
    bonjour,

    Je pensais que le sed était le même sur toutes les plateformes
    ça ne fonctionne pas mieux avec le script mais je vais me servir d'une partie du code. MErci.
    0
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    avec awk
    $ awk -F "[<>]" 'n++ && $3 "" {printf ";"} $3 "" {printf $3} !NF {print ""; n=0} END {print ""}' fichier
    bucket-ev-srv01;1856;GB;26000483
    bucket-ev-srv02;1783;GB;33156887
    bucket-cas;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;0;GB;8
    bucket-ev-jrn;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;523;GB;9201066
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. bob737 Messages postés 157 Statut Membre
     
    Merci! on est pas loin . C'est presque bon mais j'obtiens le résultat sur une ligne.

    ;ns_ev_001;6595;GB;109563059;2017-01-17T13:08:20Z;bucket-cas;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;GB;8;bucket-ev-jrn;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;552;GB;9706053;bucket-ev-srv01;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;2114;GB;29619241;bucket-ev-srv02;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;1998;GB;36825032;bucket-ev-srv03;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;1931;GB;33412725

    Désolé, C'est ma faute car le source ne doit être correcte même si je ne vois pas de différence....
    La source ci-dessous.

    Fichier xml source : http://dl.free.fr/getfile.pl?file=/9AQ08FId
    0
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      je m'étais basé sur la ligne vide pour la fin de ligne
      c'est à <bucket_billing_info> qu'il faut changer de ligne ?
      0
      1. bob737 Messages postés 157 Statut Membre > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
         
        oui. d'ailleurs on ajoutant sed 's/\<bucket_billing_info>/ /g' en début de ta commande, j'arrive presque à ce que je veux. J'ai juste un saut de ligne en trop entre chaque ligne résultat.
        Merci de ton aide.
        0
      2. bob737 Messages postés 157 Statut Membre > bob737 Messages postés 157 Statut Membre
         
        Je ne suis pas loin. Le première ligne n'est pas correct.

        ;ns_ev_001;6596;GB;109580412;2017-01-17T14:00:52Z
        bucket-cas;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;GB;8

        bucket-ev-jrn;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;553;GB;9723340

        bucket-ev-srv01;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;2114;GB;29619261

        bucket-ev-srv02;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;1998;GB;36825078

        bucket-ev-srv03;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;1931;GB;33412725
        0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      comme ca?
      $ awk -F "[<>]" '$3 "" {if(n++)printf ";"; printf $3} /bucket_billi/ {print ""; n=0} ' fichier | awk NF
      ns_ev_001;6595;GB;109563059;2017-01-17T13:08:20Z
      bucket-cas;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;0;GB;8
      bucket-ev-jrn;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;552;GB;9706053
      bucket-ev-srv01;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;2114;GB;29619241
      bucket-ev-srv02;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;1998;GB;36825032
      bucket-ev-srv03;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;1931;GB;33412725
      0
      1. bob737 Messages postés 157 Statut Membre > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Nickel!! Un grand merci!
        0