Localizar linha com dígitos

5

Como encontrar uma linha que contenha valores numéricos?

i.e. Eu quero encontrar alguma linha que tenha alguns dígitos. Eu estou usando o Ubuntu 16.04. Posso fazer isso com o comando grep ?

    
por Avani badheka 02.12.2016 / 14:32

3 respostas

13

Sim, você pode!

grep '[0-9]' file

Substitua file pelo nome do seu arquivo ...

    
por Zanna 02.12.2016 / 14:35
11

Aqui estão algumas opções, todas usando o seguinte arquivo de entrada de teste:

foo
bar 12
baz

Todos esses comandos imprimirão qualquer linha de entrada contendo pelo menos um número:

$ grep '[0-9]' file
bar 12
$ grep -P '\d' file
bar 12
$ awk '/[0-9]/' file
bar 12
$ sed -n '/[0-9]/p' file
bar 12
$ perl -ne 'print if /\d/' file
bar 12
$ while read line; do [[ $line =~ [0-9] ]] && printf '%s\n' "$line"; done < file
bar 12
$ while read line; do [[ $line = *[0-9]* ]] && printf '%s\n' "$line"; done < file
bar 12
    
por terdon 02.12.2016 / 15:00
2

Ninguém mencionou o python ainda, então aqui está:

bash-4.3$ cat file
foo
foo1bar
barfoo foo bar
barfoo 123 foobar 321
bash-4.3$ python -c 'import re,sys;matched=[line.strip() for line in sys.stdin if re.findall("[0-9]",line)];print "\n".join(matched)' < file 
foo1bar
barfoo 123 foobar 321

A ideia básica de como isso funciona é que damos o arquivo como entrada stdin, o código python lê todas as linhas no stdin e usa a função re.findall() do módulo regex para combinar linhas e finalmente imprime a lista dessas linhas. Um pouco longo, mas funciona. Algumas partes podem ser muito reduzidas, digamos assim:

python -c 'import re,sys;print "\n".join([l.strip() for l in sys.stdin if re.findall("[0-9]",l)])' < file 

Na nota lateral, isso é python2. Use a função print com parênteses para adaptá-la a python3

    
por Sergiy Kolodyazhnyy 03.12.2016 / 09:33