Réponses:
Quelques autres façons:
sed
sed 's/.*(\(.*\))/\1/' file
perl
perl -pe 's/.*\((.*)\)/$1/' file
ou
perl -lanF"[()]" -e 'print $F[1]' file
ou
perl -pe 's/.*\((.+?)\).*/$1/;' file
awk
awk -F"[()]" '{print $2}' file
coquille
while IFS="()" read a b; do echo "$b"; done < file
-F
vous permet de choisir quel (s) personnage (s) awk utilisera pour diviser la ligne en champs. Ici, je lui donne une classe de caractères ( []
) composée de parenthèses ouvrantes et fermantes. Il va donc diviser la ligne (
indéfiniment )
. En conséquence, le 2ème champ sera le contenu des parenthèses. Par exemple, avec la chaîne G8 = P(G1,G3)foo
, $1
sera G8 = P
, $2
sera G1,G3
et $3
serait foo
.
grep -oP '\(\K[^)]+' file
Cela recherche la parenthèse ouvrante, l'ignore, puis imprime tous les caractères non parenthèses fermés qui suivent.
Nécessite GNU grep
sed 's/^.*(//;s/)$//' /path/to/file
Pour décomposer cela:
sed
est le s
tream itor ed
. 's/^.*(//;s/)$//'
est le script envoyé sed
, qui se décompose comme suit:
s/^.*(// substitute nothing for the beginning of any line (`^`) followed by anything up until an open-paren (`(`)
s/)$// substitute nothing for a close-paren (`)`) followed immediately by the end of a line
awk -F'(' '{print $NF}' file | sed 's/)//g'
awk -F"[()]" '{print $2}' file
comme dans la réponse de