Exclua todas as linhas de texto que não são todos os números

3

Eu tenho uma lista de palavras que eu gostaria de extrair cada linha de texto que contém apenas números, para um novo arquivo. O que eu faço?

    
por user184499 13.08.2016 / 10:05

2 respostas

5

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.

    
por 13.08.2016 / 10:29
4

Exclua qualquer linha contendo letras por sed e, em seguida, coloque sua saída em outro arquivo:

sed '/[a-z]/Id' yourInputFile > yourOutputFile

OU se você quiser alterar o arquivo original no local:

sed -i '/[a-z]/Id' yourInputFile 
    
por 13.08.2016 / 10:16