Como faço para buscar apenas números no grep?

43

Eu tenho um arquivo assim:

 other lines . . .    
 blah blah blah (:34)

Eu gostaria de encontrar a ocorrência de números no arquivo acima. Eu inventei:

grep [0-9] filename

Mas isso está imprimindo tudo:

blah blah blah (:34)

Em vez disso, quero apenas 34 . Existe alguma maneira de fazer isso?

    
por Ant's 05.09.2012 / 05:32

3 respostas

51

Você pode usar grep -E para acessar a sintaxe de expressão regular estendida (Igual a egrep )

Eu criei um testfile com os seguintes conteúdos:

>cat testfile
this is some text
with some random lines

again some text
ok now going for numbers (:32)
ok now going for numbers (:12)
ok now going for numbers (:132)
ok now going for numbers (:1324)

Agora, para calcular os números sozinhos do texto que você pode usar

>grep -Eo '[0-9]{1,4}' testfile
32
12
132
1324

será produzido.

Aqui "- o" é usado para produzir apenas o segmento correspondente da linha, em vez do conteúdo completo da linha.

Os colchetes ondulados (por exemplo, {e}) indicam o número de instâncias da correspondência. {1,4} requer que o caractere anterior ou classe de caractere deva ocorrer pelo menos uma vez, mas não mais que quatro vezes.

Espero que isso ajude

    
por devav2 05.09.2012 / 06:40
4

grep -o imprimirá apenas a parte correspondente da linha. Caso contrário, o grep imprimirá qualquer linha com o padrão.

    
por roadmr 05.09.2012 / 05:41
4

Você pode usar a expressão de colchete RE [:digit:] especificada na seção 9.3.5 do padrão POSIX , em combinação com -o flag para imprimir apenas "palavras" correspondentes

$ grep -o '[[:digit:]]*' <<< $'No number in this line\nbut 123 here'                                                     
123
    
por Sergiy Kolodyazhnyy 05.02.2017 / 18:29