Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1653 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  besoin d'aide sur sed

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

besoin d'aide sur sed

n°1147396
dams78
développateur
Posté le 09-07-2009 à 10:18:31  profilanswer
 

Bonjour,
 
je suis entrain de modifier un fichier xml avec sed
je voudrai supprimer certaine partie dès quelles contiennent le caractères ?
 
exemple : <blabla>?</blabla>
ça facile j'arrive à le supprimer via : sed -e 's/<.*>\?<\/.*>//g'
 
autre exemple :
 <blabla>?
  <uneSousPartie>toto</uneSousPartie>
 </blabla>
donc la il faudrai que je supprime tout ce que contien blabla
avec sed c'est possible de récupérer le terme "blabla" pour lui dire de tout supprimer jusqu'à ce qu'il trouve "</blabla>"
 
merci


---------------
dam's (debianer), ma galerie Flickr
mood
Publicité
Posté le 09-07-2009 à 10:18:31  profilanswer
 

n°1147603
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 09-07-2009 à 20:40:14  profilanswer
 

Tu as 2 problèmes ici : le pb des parenthèses imbriquées et le problème des lignes multiples.
 
 
La plupart des outils unix, dont sed et les expressions régulières, travaillent sur des lignes de texte (ligne par ligne).
 
On peut mélanger '/toto/ d' (trouver toto et effacer) avec 10,20 d (effacer entre les lignes 10 et 20), ça donne '/begin/,/end/ d' (effacer entre begin et end).
 
Mais ca présente pas mal de danger, il faut que end soit présent après begin, et que ce soit le bon.
 
Les expressions régulières ne sont pas un bon outil pour détecter les ( ) qui matchent (or les balises xml c'est exactement cela, toi tu veux le bon </truc> )... si on veut effacer un truc comme "( ( ( ())) )." (ou son équivalent xml), les expressions comme 's/([ ^I]*)/g' ne vont supprimer que le couple le plus interne (il faudra appeler le script plusieurs fois). Les expressions du genre 's/([ ^I()]*)/g' ne marcheront évidemment pas non plus car on va effacer autre chose que des paires là.
La solution c'est d'utiliser t :

sed '
:again
 s/([ ^I]*)//g
 t again
'


Ici 't again' va réexécuter ce qui se trouve au label ':again' SI la dernière commande de substitution a fait quelque chose au pattern space.
 
 
 
Bref, tout ça pour dire que tu as 2 problèmes (multiples lignes, élements correspondants) que sed et les regexp ne savent pas traiter.


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  besoin d'aide sur sed

 

Sujets relatifs
[besoin d'aide ]routine instalation pour debutant suite plantage eeepc[Résolu] Besoin d'aide : récupérer fichier sur un serveur
Lyx et Latex : Besoin d'aide pour paufiner une mise en pageBesoin d'aide pour problème Squid et authentification Active Directory
besoin d'aide au niveau logiciel pour faire un serveurBesoin d'aide pour un Cron et fichier .sh
Ralink RT2561 802.11g sous fédeora : besoin d'aide!!/!\ Besoin d'aide ! Linux /!\
[Xbox] Xbox Media Center ? (besoin d'aide) 
Plus de sujets relatifs à : besoin d'aide sur sed


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR