Signaler

Supprimer chaîne de caractères entre <>

Posez votre question bob737 66Messages postés jeudi 24 septembre 2009Date d'inscription 16 janvier 2017 Dernière intervention - Dernière réponse le 16 janv. 2017 à 18:14 par zipe31
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. ;-)
Afficher la suite 
Utile
+1
moins plus
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

Donnez votre avis
Utile
+0
moins plus
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! ;-)
zipe31 34124Messages postés dimanche 7 novembre 2010Date d'inscription ContributeurStatut 16 janvier 2017 Dernière intervention - 16 janv. 2017 à 17:17
# 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'
Répondre
bob737 66Messages postés jeudi 24 septembre 2009Date d'inscription 16 janvier 2017 Dernière intervention - 16 janv. 2017 à 17:46
Merci mais malheureusement, ça ne fonctionne pas.
Je suis sous AIX.
Répondre
bob737 66Messages postés jeudi 24 septembre 2009Date d'inscription 16 janvier 2017 Dernière intervention - 16 janv. 2017 à 18:02
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.
Répondre
zipe31 34124Messages postés dimanche 7 novembre 2010Date d'inscription ContributeurStatut 16 janvier 2017 Dernière intervention - 16 janv. 2017 à 18:14
Je suis sous AIX.
Ben ça fallait le dire d'entrée ;-(

Essaye avec le fichier de script.
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !