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.