Respostas:
Algumas outras maneiras:
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
Concha
while IFS="()" read a b; do echo "$b"; done < file
-F
permite escolher quais caracteres o awk usará para dividir a linha em campos. Aqui, estou dando a ele uma classe de caractere ( []
) que consiste em abrir e fechar parênteses. Então ele vai dividir a linha em (
e sobre )
. Como resultado, o segundo campo será o conteúdo dos parênteses. Por exemplo, com a string G8 = P(G1,G3)foo
, $1
será G8 = P
, $2
será G1,G3
e $3
seria foo
.
grep -oP '\(\K[^)]+' file
Ele procura o parêntese de abertura, ignora-o e imprime todos os caracteres que não estão entre parênteses próximos.
Requer GNU grep
sed 's/^.*(//;s/)$//' /path/to/file
Para dividir isso:
sed
é o s
tream itor ed
. 's/^.*(//;s/)$//'
é o script que está sendo enviado sed
, que é dividido da seguinte forma:
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
como na resposta de terdon