usando zegrep não retornando o que eu preciso

0

Eu preciso filtrar 5 endereços IP em um arquivo. Todos os arquivos * .tgz.

Os endereços IP são 10.85.1.1, 10.85.1.2, 10.85.1.3, 10.85.1.4, 10.85.1.5

Eu uso este comando:

zegrep -ai "10.85.1.[1-5]" *.tgz 

Isso me retorna também por exemplo Ip 10.85.1.45. Como eu digo o comando que [1-5] é o fim da minha string?

Eu pensei que isso daria certo:

zegrep -ai '10.85.1.[1-5]$' *.tgz

Mas isso não me devolve nada. Ainda assim, isso é possível para checar novamente o meu comando que eu tentei com os Ip's que estão no arquivo (eu apenas peguei o tail e peguei um dos Ip's mais recentes que ele retornou).

zegrep -ai '10.85.1.1[5-6]$' *.tgz

Isso também não retorna nada. Então meu comando ainda não está correto.

    
por maxim 08.09.2017 / 13:06

1 resposta

2

Há vários pontos a serem feitos sobre as expressões que você está tentando: -

  • Quando você usa . , isso corresponderá a qualquer caractere único: para corresponder a . , ele precisa ser salvo como em "10\.85\.1\.[1-5]" .
  • Se o arquivo descompactado for binário (como -a implica), não será possível assumir que o fim de linha será tratado corretamente.
  • Você pode usar "10\.85\.1\.[1-5][^0-9]" , ou seja, sequência de pesquisa seguida por um caractere não numérico, mas isso falhará no final de linha, quando não houver nenhum caractere a seguir.
  • A resposta é usar os delimitadores de palavras \< e \> :

    zegrep -ai "\<10\.85\.1\.[1-5]\>" *.tgz

Ao adicionar o \< à esquerda, você evita discordâncias com os gostos de 110.85.1.1 .

Dependendo da sua versão das expressões regulares, talvez seja necessário usar o delimitador alternativo \b :

    zegrep -ai "\b10\.85\.1\.[1-5]\b" *.tgz
    
por 08.09.2017 / 13:59

Tags