expression régulière selection d'un bout de trame

Le
n
bonjour,
j'ai fait une cature de trames qui contient notament des trames
<SyncML>*</SyncML>
avec l'* qui est tout le contenu de la trame.

Je voudrais recupérer le contenu de ces trames, (avec les deux balises
<SyncML> et </SyncML> si possible), mais j'ai un peut de mal à trouver
la commande adaptée.
Pour moi, il faudrai utiliser une expression régulière du type
"<SyncML>(.*)</SyncML>" mais je ne vois pas trop avec quelle
commande,

j'obtiens toutes les trames en faisant un
cat maCapture
et je pense qu'on pourrais mettre tous ça dans une autre commande avec
un pipe et une expression régulière
Je ne suis pas très doué avec tous ça, pourriez vous me donner un ptit
coup de main ?

Merci

Fab
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 4
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Stephane Chazelas
Le #732768
2007-04-16, 03:05(-07), :
[...]
j'ai fait une cature de trames qui contient notament des trames
<SyncML>*</SyncML>
avec l'* qui est tout le contenu de la trame.

Je voudrais recupérer le contenu de ces trames, (avec les deux balises
<SyncML> et </SyncML> si possible), mais j'ai un peut de mal à trouver
la commande adaptée.
Pour moi, il faudrai utiliser une expression régulière du type
" commande,...
[...]


perl -l -0777 -ne 'print for m{

--
Stéphane

Pascal Bourguignon
Le #732767
Stephane Chazelas
2007-04-16, 03:05(-07), :
[...]
j'ai fait une cature de trames qui contient notament des trames
<SyncML>*</SyncML>
avec l'* qui est tout le contenu de la trame.

Je voudrais recupérer le contenu de ces trames, (avec les deux balises
<SyncML> et </SyncML> si possible), mais j'ai un peut de mal à trouver
la commande adaptée.
Pour moi, il faudrai utiliser une expression régulière du type
" commande,...
[...]


perl -l -0777 -ne 'print for m{

Ça ne marche pas:

$ echo '<SyncML>stuff <![CDATA[ tralalère </SyncML> lalère! ]]></SyncML>'
| perl -l -0777 -ne 'print for m{ <SyncML>stuff <![CDATA[ tralalère </SyncML>

--
__Pascal Bourguignon__ http://www.informatimago.com/

Pour moi, la grande question n'a jamais été: «Qui suis-je? Où vais-je?»
comme l'a formulé si adroitement notre ami Pascal, mais plutôt:
«Comment vais-je m'en tirer?» -- Jean Yanne


n
Le #732766
perl -l -0777 -ne 'print for m{

n'y a t'il pas moyen d'utiliser les commandes unix de bases, sans
passer par un language de script ?

Luc.Habert.00__arjf
Le #732765
"" :

bonjour,
j'ai fait une cature de trames qui contient notament des trames
<SyncML>*</SyncML>
avec l'* qui est tout le contenu de la trame.


Mais qu'est-ce qu'il y a dans ta « trame » ? Est-ce du xml? Si non, doit-on
comprendre que ça s'arrête au premier « </SyncML> » rencontré (i.e., pas
d'imbrication) ? Est-ce qu'il peut y avoir des retours à la ligne dans une
trame?

Stephane Chazelas
Le #732764
2007-04-16, 04:55(-07), :
perl -l -0777 -ne 'print for m{

n'y a t'il pas moyen d'utiliser les commandes unix de bases, sans
passer par un language de script ?


perl est une commande Unix de base qui est un interpreter d'un
language qui n'est pas vraiment un language de script. Par
contre quand on met plusieurs commandlines dans un meme fichier,
on appelle generalement ca un script.

sed, awk... sont aussi des interpreters de languages de text
processing.

On peut faire la meme chose avec sed ou awk, mais ca sera
beaucoup, beaucoup plus fastidieux.

--
Stéphane


n
Le #732497
@ Luc :
Mais qu'est-ce qu'il y a dans ta « trame » ? Est-ce du xml?
Oui, c'est du xml

Si non, doit-on comprendre que ça s'arrête au premier « </SyncML> » rencontré
En fait, le fichier maCapture contient plusieurs trame xml commençant

par <SyncML> et se terminant par </SyncML> que je voudrais extraire du
fichier.
Ces trames sont toujours sur plusieurs lignes, et donc les deux
balises <SyncML> et </SyncML> ne sont jamais sur la même ligne

@ Stephane :
merci pour tes précisions, mais je pensait que pour ce petit problème
simple on pouvais le résoudre facilement avec des commandes
"courrante" telles que cat, greb, sed, ... mais je suis ouvert à toute
solution qui foncitonne ;)

n
Le #732496
des commandes "courrante" telles que cat, greb, sed, ...


évidement, il faut lire grep, c'est une coquille !

Luc.Habert.00__arjf
Le #732495
"" :

Oui, c'est du xml


Bon, alors il faut utiliser un truc fait pour traiter du xml. Les commandes
unix historiques ne sont pas faites pour ça. Elles sont faites pour
appliquer des regexps ligne par ligne, ce qui n'a vraiment rien à voir.

Tu peux par exemple faire un script xslt et l'appliquer avec xsltproc.
J'imagine aussi qu'il y a des modules perl pour traiter du xml.

n
Le #732494
ok, c'est le fait que ce soit sur plusieurs lignes qui rend impossible
le traitement avec les commandes unix historiques ?
parce que sur une ligne, je suis sûr que c'est possible en tout cas.
Peut être que je peux faire un ptit script qui utilise les commandes
historique alors ?
Luc.Habert.00__arjf
Le #732493
"" :

ok, c'est le fait que ce soit sur plusieurs lignes qui rend impossible
le traitement avec les commandes unix historiques ?


Disons que c'est un très gros obstacle. Ensuite, tu es aussi géné par le
fait que les regexps, ça ne permet pas de parser des arbres. Enfin on peut
s'en sortir dans les cas particuliers où on a une borne raisonable sur le
degré d'imbrication des balises qu'on veut matcher, mais c'est du hack crade
et fragile.

Peut être que je peux faire un ptit script qui utilise les commandes
historique alors ?


Oui, tu as parfaitement le droit de t'arracher les cheveux à ça...
Maintenant, je pense qu'apprendre le xslt serait un meilleur usage de ton
temps.

Publicité
Poster une réponse
Anonyme