'ip addr' em uma linha por interface

2

Gostaria de imprimir informações específicas sobre a configuração de rede para diferentes interfaces em todos os servidores que eu gerencio:

  • o nome da interface
  • o endereço ipv4 da interface
  • o endereço MAC do hardware da interface

Infelizmente, um simples ip -o addr show não permite analisar facilmente sua saída com awk por causa das quebras de linha.

É possível ter ip addr show impresso em exatamente uma linha por interface?

Senão, é possível obter o mesmo resultado usando awk e / ou sed ? Isso vai além do meu conhecimento desses dois comandos, já que as linhas precisam ser concatenadas árvore por árvore…

    
por Jav 15.07.2015 / 09:58

2 respostas

1

ip -o addr show , mas imprime menos informações.

Aqui está uma maneira de massagear a saída de ip addr show em uma linha por interface. Imprima uma nova linha antes do início de cada interface, exceto na primeira linha; depois imprima o conteúdo da linha; imprima uma nova linha no final do arquivo.

ip addr show |
awk '/^[^ ]/ && NR!=1 {print ""}
     {printf "%s", $0}
     END {print ""}'
    
por 16.07.2015 / 02:43
0
sed  -nE  '/^[0-9]/! {H;$!d}     # accumulate trailing lines
           x                     # swap new leading line for accumulated gaggle
           s/[^ ]* ([^ ]*).* link\/[^ ]* ([^ ]*).* inet ([^ ]*).*/\t\t/p'

e o subst é bastante simples, identifique e edite a segunda palavra, palavra após link/anything , palavra após inet

    
por 15.07.2015 / 11:03

Tags