/ / Perl one liner + expressão regular para corresponder a parte da palavra - regex, linux, perl, shell, ksh

Perl um forro + expressão regular para combinar parte da palavra - regex, linux, perl, shell, ksh

Eu escrevo Perl um código de liner para corresponder ao endereço IP de acordo com a seguinte regra:

corresponder apenas aos três primeiros octetos, enquanto os quatro octetos devem ser válidos de 0 a 255, além desse número ou "."não deve existir antes do primeiro octeto e número ou "."não deve existir também após os quatro octetos

exemplo

 export IP=100.187.34

exemplo de IP "s que devem corresponder

:100.187.34.12:.10
IP=100.187.34.100$
AAA100.187.34.199BBB
address:100.187.34.210+

exemplo de IPs que não devem corresponder

 55.100.187.34.99
.100.187.34..
100.187.34.100.1
100.187.34.2100
1.100.187.34
100.187.34.1.1

então esse é o meu código (não funciona de acordo com minhas regras):

      echo [...]xxx.xxx.xxx.xxx[...]   |    perl  -pe "print if  /(?<![d.])Q$ENV{IP}E(?=.(?:1?d?d|2[0-4][0-9]|25[0-5])(?!d))/; "

o problema é que meu código corresponde quase a qualquer número

por favor, informe o que preciso corrigir no meu código para corresponder aos IPs apenas de acordo com as regras

Respostas:

1 para resposta № 1

Aqui estão alguns exemplos de correspondência de regexp IP do Livro de Receitas de Expressões Regulares de O "Reilly":

Regex simples para procurar um endereço IP:

^(?:[0-9]{1,3}.){3}[0-9]{1,3}$

Regex preciso para procurar um endereço IP:

^(?:(?: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]?)$

Regex simples para extrair endereços IP de texto mais longo:

b(?:[0-9]{1,3}.){3}[0-9]{1,3}b

Regex preciso para extrair endereços IP de texto mais longo:

b(?:(?: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]?)b

Regex simples que captura as quatro partes do endereço IP:

^([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})$

Regex preciso que captura as quatro partes do endereço IP:

^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).↵
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).↵
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).↵
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

0 para resposta № 2
 perl -e "$v=quotemeta($ENV{IP});print if /$v.(?:1?d?d|2[0-4][0-9]|25[0-5])(?!d)/?1:0"