Imprime a string entre dois parênteses

10

Eu tenho arquivo com estas linhas

G8 = P(G1,G3)
G9 = P(G3,G4)
G12 = P(G2,G9)
G15 = P(G9,G5)
G16 = P(G8,G12)
G17 = P(G12,G15)

Eu preciso da saída como

G1,G3
G3,G4
.....

Como posso fazer isso com o comando sed / grep ou usando perl?

    
por user56153 07.01.2014 / 18:32

6 respostas

12

Algumas outras maneiras:

  • sed

    sed 's/.*(\(.*\))//' 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 
    
  • shell

    while IFS="()" read a b; do echo "$b"; done < file 
    
por 07.01.2014 / 18:43
7

Há mais de uma maneira de fazer isso:

perl -nle 'print $1 if /\((.*)\)/' file

ou:

awk 'NR > 1 {print $1}' RS='(' FS=')' file
    
por 07.01.2014 / 18:55
5

sed 's/^.*(//;s/)$//' /path/to/file

Para quebrar isso:

sed é o s tream ed itor. 's/^.*(//;s/)$//' é o script enviado para 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
    
por 07.01.2014 / 18:40
4
grep -oP '\(\K[^)]+' file

Isso procura o parêntese de abertura, ignora-o e depois imprime todos os caracteres que não são parênteses próximos.

Requer grep do GNU

    
por 07.01.2014 / 18:36
1

A simple cut solution:

$ cat test01 |cut -d "(" -f2 | cut -d ")" -f1

    
por 10.03.2015 / 13:12
0
awk -F'(' '{print $NF}' file | sed 's/)//g'
    
por 13.08.2017 / 08:16

Tags