Sed isoler les parenthèses

Résolu
hblkjack Messages postés 9 Statut Membre -  
zipe31 Messages postés 38797 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Je souhaiterais faire un exercice en sed mais je n'y arrive pas.
On dispose d'un fichier de texte contenant des parenthèses, et on suppose que la parenthèse ouvrante et la parenthèse fermante de chaque paire de parenthèses se trouvent sur une même ligne. Il peut y avoir plusieurs paires de parenthèses (non imbriquées) par ligne. Afficher uniquement le texte contenu entre parenthèses. Ainsi,

% echo 'ab(c)def(ghi)jk' | sed ... 
cghi


Pourriez vous m'aider svp?

A voir également:

3 réponses

hblkjack Messages postés 9 Statut Membre 1
 
J'ai essayé avec les backreferences mais ca ne marche pas bien vu que je ne sais pas exactement combien de () il peut y avoir. Dans l'exemple il y en a 2 mais il pourrait y en avoir 3 ou 4.
echo 'ab(c)def(ghi)jk' | sed -nre 's/.*\((.*)\).*/\1/gp'

ou même
echo 'ab(c)def(ghi)jk' | sed -nre 's/^.*\((.*)\).*/\1/gp'
1
zipe31 Messages postés 38797 Date d'inscription   Statut Contributeur Dernière intervention   6 434
 
Attention à la gourmandise des regex !!!

Un ".*" est beaucoup trop gourmand, et va englober trop de choses ;-\

Il faut que tu joues avec des expressions du genre (je n'emploie pas l'option "-r") :
(\([^)]*\))
Qui vont sélectionner dans la référence arrière des caractères se trouvant après une parenthèse ouvrante, mais s'arrêter avant la première parenthèse fermante "[^)]".
0
zipe31 Messages postés 38797 Date d'inscription   Statut Contributeur Dernière intervention   6 434
 
Salut,

Qu'as-tu essayé de faire déjà ?
0
hblkjack Messages postés 9 Statut Membre 1
 
Ca marche du feu de Dieu. Merci.
echo 'ab(c)def(ghi)jkl' | sed -rn 's/[^(]*\(([^)]*)\)[^(]*/\1/gp'

Merci.
0
zipe31 Messages postés 38797 Date d'inscription   Statut Contributeur Dernière intervention   6 434
 
De rien ;-))

Perso j'avais :

sed -n 's/[^(]*(\([^)]*\))[^(]*/\1/gp'
0