Não é possível combinar um número específico com “grep -E”

1

Aqui estou tentando pesquisar números que variam de 0 a 255, mas alguns números aleatórios são correspondidos. Exemplos são:

1335.0.1.234

ou

241.92.88.103

Bolded são os números que são correspondidos.

Esse número que recebo tem um número que excede 255, mas ainda é correspondido porque ele vê 1 como um número independente (?). Mesmo que o número não exceda 255, as partes aleatórias do número são correspondidas.

O comando que estou usando é:

grep -E '[0-255]' asd.txt
    
por Lester 27.08.2015 / 18:34

1 resposta

3

Você entendeu mal as expressões regulares: [0-255] não significa "um número decimal entre 0 e 255 ", mas significa "um dos 0 , 1 , 2 ou 5 ".

Esta é a expressão regular correta:

\b(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\b

Se você tentar, deverá obter a seguinte saída:

$ grep -E '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\b' asd.txt
1335.0.1.234
241.92.88.103

(Todos os números, exceto 1335, foram correspondidos).

Dica de bônus: Se você deseja apenas os números correspondentes (sem os pontos e os números sem correspondência), use -o :

$ grep -Eo '\b(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\b' asd.txt
0
1
234
241
92
88
103

Outra dica: Se você quiser corresponder endereços IPv4 válidos (um por linha), use o seguinte comando:

grep -E '^((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])$' asd.txt
    
por Andrea Corbellini 27.08.2015 / 19:10