Extrair inteiros entre parênteses

2

Eu tenho um arquivo que contém uma lista de nomes de filmes e seu ano de lançamento. Eu quero listar todos os anos de lançamento. Especificamente, meu arquivo é exibido abaixo

TDKR(2012)    
Vicky Cristina Barcelona (2008)  
...

Eu tentei o grep com o regex da seguinte forma

grep "^.*\([0-9]*\)$" movie.txt

e funciona mas está imprimindo linha inteira quero apenas anos. Posso fazer isso com grep ?

    
por user997704 22.10.2012 / 19:31

3 respostas

3

O GNU grep suporta uma opção -o que lhe dará o padrão correspondente, então você pode usar grep -o '([0-9]\+)' , mas isso também imprimirá os parênteses. Para mais flexibilidade e portabilidade, no entanto, você deve pós-processar com sed :

grep '([0-9]\+)$' movie.txt | sed 's/.*(\([0-9]\+\))$//'
# assumes that the year is always at the end of the line.
    
por 22.10.2012 / 19:37
2

Se os números forem sempre o último campo, você poderá fazê-lo com um único comando awk.

bash$ awk '{gsub(/\(|\)/," "); print $NF};' $file
2012
2008
...
    
por 22.10.2012 / 20:43
2

Com perl:

perl -lne 'print for /\((\d+)\)/g'
    
por 22.10.2012 / 21:03