Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

32 réponses
Avatar
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=E9rer le contenu de ces trames, (avec les deux balises
<SyncML> et </SyncML> si possible), mais j'ai un peut de mal =E0 trouver
la commande adapt=E9e.
Pour moi, il faudrai utiliser une expression r=E9guli=E8re 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 =E7a dans une autre commande avec
un pipe et une expression r=E9guli=E8re
Je ne suis pas tr=E8s dou=E9 avec tous =E7a, pourriez vous me donner un ptit
coup de main ?

Merci

Fab

10 réponses

1 2 3 4
Avatar
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
"<SyncML>(.*)</SyncML>" mais je ne vois pas trop avec quelle
commande,...
[...]


perl -l -0777 -ne 'print for m{<SyncML>.*?</SyncML>}gs'


--
Stéphane

Avatar
Pascal Bourguignon
Stephane Chazelas writes:

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
"<SyncML>(.*)</SyncML>" mais je ne vois pas trop avec quelle
commande,...
[...]


perl -l -0777 -ne 'print for m{<SyncML>.*?</SyncML>}gs'


Ça ne marche pas:

$ echo '<SyncML>stuff <![CDATA[ tralalère </SyncML> lalère! ]]></SyncML>'
| perl -l -0777 -ne 'print for m{<SyncML>.*?</SyncML>}gs'
<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


Avatar
n
perl -l -0777 -ne 'print for m{<SyncML>.*?</SyncML>}gs'


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

Avatar
Luc.Habert.00__arjf
"" :

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?

Avatar
Stephane Chazelas
2007-04-16, 04:55(-07), :
perl -l -0777 -ne 'print for m{<SyncML>.*?</SyncML>}gs'


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


Avatar
n
@ 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 ;)

Avatar
n
des commandes "courrante" telles que cat, greb, sed, ...


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

Avatar
Luc.Habert.00__arjf
"" :

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.

Avatar
n
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 ?
Avatar
Luc.Habert.00__arjf
"" :

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.

1 2 3 4