linux + match IP ADDRESS com 3 octetos ou com 4 octetos

1

como combinar o endereço IP com 4 octetos ou com 3 octetos em um comando?

target - match xxx.xxx.xxx ou xxx.xxx.xxx.xxx (a sintaxe deve caber para Linux e Solaris)

como mesclar os seguintes comandos em um comando?

 echo $IP_ADDRESS  | grep  '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'
 echo $IP_ADDRESS  | grep  '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' 

Eu também tento isso (mas não funciona)

        echo $IP_ADDRESS | egrep "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}|[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"
    
por yael 06.05.2013 / 12:29

2 respostas

1
 if expr ".$IP_ADDRESS" : '\(\.[0-9]\{1,3\}\)\{3,4\}$' > /dev/null 
 then echo match
 else echo no match
 fi

Você não pode usar grep aqui porque grep é usado para corresponder linhas, não seqüências de caracteres. Você não pode usar echo como substituições em seus argumentos. Você não pode deixar as variáveis sem aspas, como ocorre na geração de nomes de arquivos e na divisão de palavras.

Se você quiser encontrar as linhas que correspondem a esse padrão em um arquivo de entrada, é aí que você deseja usar grep . Como:

 grep -Ex '[0-9]{1,3}(\.[0-9]{1.3}){2,3}' < input.file

Informaria todas as linhas que consistem exatamente ( -x option) em um número decimal de 3 ou 4 até 3 dígitos.

Se você deseja extrair todos os 3 ou 4 endereços IP de números decimais de até três dígitos em um arquivo de texto, provavelmente a melhor opção seria recorrer a perl :

perl -lne 'print for grep /^\d{1,3}(\.\d{1,3}){2,3}$/, /[\d.]+/g'

A saída seria:

111.222.333
1.2.3.4

Para uma entrada como:

foo 1.1234.2.3 1.2 1.2.3.4.5 111.222.333 bar1.2.3.4@

Embora você também possa fazer:

tr -cs 0-9. '[\n*]' < input.file |
  grep -Ex '[0-9]{1,3}(\.[0-9]{1.3}){2,3}'
    
por 06.05.2013 / 13:16
0

Isso deve ser feito:

echo $IP_ADDRESS | grep -Eo '([0-9]{1,3}\.[0-9]{1,3}(\.[0-9]{1,3}){1,2})'

ou usando os conjuntos nomeados:

echo $IP_ADDRESS | grep -Eo '([[:digit:]]{1,3}\.[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){1,2})'

Exemplos

# 4 octets
$ echo '10.10.0.1' | grep -Eo '([0-9]{1,3}\.[0-9]{1,3}(\.[0-9]{1,3}){1,2})'
10.10.0.1

# 3 octets
$ echo '10.10.0' | grep -Eo '([0-9]{1,3}\.[0-9]{1,3}(\.[0-9]{1,3}){1,2})'
10.10.0

# 2 octets
$ echo '10.10' | grep -Eo '([0-9]{1,3}\.[0-9]{1,3}(\.[0-9]{1,3}){1,2})'
$

OBSERVAÇÃO: eles corresponderão a todas as expressões de 0.0.0.0 a 999.999.999.999

    
por 06.05.2013 / 12:40