Para extrair apenas linhas contendo dígitos:
$ grep '^[0-9][0-9]*$' words >digits
A expressão regular ^[0-9][0-9]*$
corresponderá a qualquer linha que comece com um dígito e contenha apenas dígitos até o final da linha.
Se o seu arquivo não tiver linhas vazias, você poderá alterá-lo para ^[0-9]*$
.
Se você quiser linhas com números , apague linhas com caracteres alfabéticos (mais fácil do que tentar construir uma expressão regular para um número genérico):
$ grep -v '[a-zA-Z]' words >numbers
Ambas as variantes usando classes de caracteres POSIX:
$ grep '^[[:digit:]][[:digit:]]*$' words >digits
$ grep -v '[[:alpha:]]' words >numbers
Atualizar : Se você quiser selecionar as linhas que contêm números de ponto flutuante , você pode usar a expressão regular (estendida) ^[+-]?([0-9]*\.)?[0-9]+$
:
$ grep -E '^[+-]?([0-9]*\.)?[0-9]+$' words >floats
Tudo se resume ao tipo de "número" que estamos procurando.