Imprima a saída do comando em linhas separadas

1
ip a | egrep '([0-9]{1,3}\.){3}[0-9]{1,3}|enp0s' | grep -e 10 -e 172 -e 192 | awk '{print $2}' | awk '{gsub("/24", "");print}' | xargs

O comando acima fornece a saída como:

enp0s3: 10.0.2.15 enp0s8: 192.168.56.100

Eu quero que a saída seja impressa em duas linhas diferentes, começando com os nomes das placas de rede.

Como posso editar a saída para obter o resultado desejado?

    
por Vivek Dabas 24.06.2018 / 04:47

2 respostas

1

Acho que o que você está procurando é

 ip a | awk '/inet .*enp[0-9]*s[0-9]*/ { print $NF " " gensub(/\/[0-9]*/,"",1,$2); }'

Note que eu modifiquei a correspondência para o nome da interface para aceitar mais que enp0s (no meu sistema muitas das minhas interfaces são enp2s *). Além disso, estou combinando linhas com 'inet', isso excluirá endereços ipv6 ('inet6'). Espero que isso ajude.

    
por 25.06.2018 / 03:51
0

Uma solução rápida e suja é fornecer a opção xargs a -L 2 . Seria melhor simplesmente fazer tudo em awk ; é muito poderoso.

Você percebe que a string de pesquisa -e 10 dada a grep poderia facilmente combinar um endereço Ethernet ou um endereço IPv6.

    
por 24.06.2018 / 05:12

Tags