Sed isoler les parenthèses
Résolu
Bonjour,
Je souhaiterais faire un exercice en sed mais je n'y arrive pas.
Pourriez vous m'aider svp?
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?
3 réponses
-
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êmeecho 'ab(c)def(ghi)jk' | sed -nre 's/^.*\((.*)\).*/\1/gp'
-
ContributeurAttention à 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 "[^)]".
-
-
ContributeurSalut,
Qu'as-tu essayé de faire déjà ?
-
Ca marche du feu de Dieu. Merci.
echo 'ab(c)def(ghi)jkl' | sed -rn 's/[^(]*\(([^)]*)\)[^(]*/\1/gp'
Merci.