Como determinar quais endereços IP estão disponíveis em uma tabela de hosts?

0

Estou trabalhando em um script que lerá o arquivo / etc / hosts e determinará quais IPs estão disponíveis no arquivo de hosts.

A aparência do arquivo de hosts é a seguinte:

172.17.164.2 System1
172.17.164.3 System2
172.17.164.4 System3
172.17.164.5 System4
172.17.164.6 System5
172.17.164.7
172.17.164.8
172.17.164.9
172.17.164.10

Minha pergunta é: como leio cada linha e verifico se o segundo campo está faltando? Se o arquivo hosts estiver faltando o nome do host, significa que o IP está disponível.

    
por WeSC 12.05.2016 / 02:37

2 respostas

1

Você pode usar awk (como sugerido pela tag), verificando se o número de campos em um dado registro é um. Para obter uma lista de endereços "gratuitos":

awk '(NF == 1) { print; }' </etc/hosts

Isso pode ser muito simples, se o arquivo /etc/hosts contiver comentários. Você pode filtrá-los, ignorando as linhas de comentários:

awk '/^#/ { next; } (NF == 1) { print; }' </etc/hosts

awk scripts são padrão (ou condição) e pares de ação:

  • No primeiro script, awk checks NF - o número de campos na linha (que por padrão são separados em branco) e imprime cada linha com um único campo. / li>
  • O segundo script soluciona o problema de um arquivo /etc/hosts com comentários, verificando as linhas que começam com "#" e ignorando o processamento adicional dessas linhas (saltando para a linha next ).
por 12.05.2016 / 02:48
0

Para os dados fornecidos, você pode usar grep -v System /etc/hosts .

Para uma solução mais geral, use egrep -v "\S+\s+\S+" /etc/hosts , o que significa mostrar-me qualquer linha que não contenha algo que não seja espaço em branco seguido por espaço em branco seguido por algo que não seja espaço em branco, por exemplo pelo menos duas palavras.

    
por 12.05.2016 / 17:02