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

sed et suppression de blocs de lignes

3 réponses
Avatar
Kevin Denis
Bonjour,

j'ai un document texte qui contient deux types de blocs que je dois
supprimer.

Le premier bloc est bien délimité. Il est:
#begin_bloc
(...)
#end_bloc

sed devrait s'en sortir sans trop de mal. Par contre le deuxième type
de bloc est plus fin a critériser:

#begin_sld
sld:
(...)
sld:
(...)
sld:
(...)
#end_sld

Et je ne dois récupérer que les lignes comprises entre le dernier
sld: (inclus) et le end_sld. Et là, j'ai un peu plus de mal..
Généralement il n'y a qu'un seul 'sld', mais il peut y en avoir
beaucoup (pas plus qu'une dizaine ceci dit).

Avez vous une idée?
Les délimiteurs sont arbitraires et ne peuvent être trouvés ailleurs
dans le doc. Le # est le symbole de commentaire, peu importe qu'il
soit présent ou non dans le fichier définitif.

Merci
--
Kevin

3 réponses

Avatar
Cyrille Lefevre
Le 29/06/2010 17:36, Kevin Denis a écrit :
<snip>
sed devrait s'en sortir sans trop de mal. Par contre le deuxième type



effectivement

<snip>
Avez vous une idée?



en sed, ce doit être jouable, mais avec les lettres en MAJUSCULES, le x
et une logique à réveiller un mort... plus simple en awk... :-)

à chaque fois que tu rencontres ton délimiteur de début, tu commenc es à
empiler les lignes. si tu le rencontres à nouveau, tu raz, et
recommences. si tu rencontres le délimiteur de fin, tu affiches les
lignes sauvegardées. si tu es hors délimiteur, tu affiche toutes les
lignes. avec 1 ou 2 drapeaux, ce ne doit pas pas compliqué à implém enter.

Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
Avatar
Kevin Denis
Le 30-06-2010, Cyrille Lefevre a écrit :
<snip>
sed devrait s'en sortir sans trop de mal. Par contre le deuxième type


effectivement

<snip>
Avez vous une idée?



en sed, ce doit être jouable, mais avec les lettres en MAJUSCULES, le x
et une logique à réveiller un mort... plus simple en awk... :-)



Certes.
Je vais faire plus simple je crois. Autant reprendre la même logique dans
les deux cas:
#begin_bloc2
sld:
(...)
sld:
(...)
#end_bloc2
sld:
(...)

Ca me demande juste un peu de refactoring du fichier au début, et ça
sera plus simple ensuite.
--
Kevin
Avatar
mcc
Kevin Denis a écrit :

Bonjour,

Par contre le deuxième type
de bloc est plus fin a critériser:

#begin_sld
sld:
(...)
sld:
(...)
sld:
(...)
#end_sld

Et je ne dois récupérer que les lignes comprises entre le dernier
sld: (inclus) et le end_sld. Et là, j'ai un peu plus de mal..
Généralement il n'y a qu'un seul 'sld', mais il peut y en avoir
beaucoup (pas plus qu'une dizaine ceci dit).

Avez vous une idée?



bonsoir,
je ne suis pas une spécialiste de sed mais la flemme
m'inspire une solution possible :
peux-tu inverser ton fichier (tac je crois)
et il sera plus simple de repérer pour supprimer ou garder chaque 1er
bloc :
#end_sld
(...)
sld:

puis de réinverser les lignes...

--
Marie-Claude Collilieux
Bretagne