Linhas de grep que têm alcance de número

0

Eu tenho poucas linhas no meu arquivo de texto como abaixo. Eu quero grep todas as linhas que têm padrões como :100 , :101 e :102 até :199 . Como obter essas linhas em vez de procurar assim. :100\|:101\|:102 ...

abcd fhijk:123
abcd fhijk:124
abcd fhijk:174
abcd fhijk:225
    
por Swathi Vutukuri 03.11.2018 / 12:51

1 resposta

2

Assumindo que seus números sejam sempre inteiros positivos sem unidade, sinais de adição unários ou outras decorações.

Expressões regulares não são ótimas para comparar números, mas se você vir seus dados de entrada como duas colunas separadas por : , seria mais fácil manipulá-las com awk :

awk -F ':' '$2 >= 100 && $2 <= 199' <file

Isso compararia o segundo campo : -separated nos dados para 100 e 199 e imprimiria a linha completa se o número estivesse dentro do intervalo determinado.

Também é possível com grep , mas não é tão flexível:

grep ':1[0-9][0-9]$' <file

A expressão [0-9] corresponde a um único caractere entre 0 e 9 . O $ ancora a expressão ao final da linha.

Se você quisesse combinar linhas com os números de 100 a 250, alteraria apenas 199 no código awk para 250 , mas com uma expressão regular você precisaria criar

grep -E ':(1[0-9][0-9]|2[0-4][0-9]|250)$' <file

Aqui, as três partes do parênteses correspondem a números de 100 a 199, depois de 200 a 249 e, por último, de 250. (Digo "números", mas expressões regulares sempre operam em strings ) .

    
por 03.11.2018 / 12:57