terminal command | grep IP

4
ifconfig -a | grep  10.16
     inet 10.16.x.xx netmask 0xffffff00 broadcast 10.16.x.xxx
     inet 10.16.x.xx netmask 0xffffff80 broadcast 10.16.x.xxx

Eu substituí os números por x

Meu objetivo é remover tudo além dos IPs inet. então apenas mostra como:

10.16.x.xx
10.16.x.xx

Isso é possível? mantendo o comando o mais simples possível e para que ele funcione em vários sistemas operacionais (10.9 / 10.10 / 10.11)

    
por roaima 11.07.2016 / 18:28

5 respostas

7

Bem, se você sabe que seu IP começa com 10.16 , é trivial:

ifconfig -a | grep -oP '\b10\.16\.[0-9.]+\b'

Ou, se o seu grep não for compatível com -P ou -o :

ifconfig -a | awk '/10\.16\./ && /inet/{print $2}'

Se não, você pode encontrar todas as linhas que começam com inet e imprimir seu segundo campo:

ifconfig -a | awk '$1=="inet"{print $2}'

Isso, no entanto, também retornará 127.0.0.1 , o localhost. Para evitar isso, você poderia fazer:

ifconfig -a | awk '$1=="inet" && $5=="broadcast"{print $2}'

Eu não tenho um mac para testar isso, mas em geral, ifconfig está ficando obsoleto em favor de ip . Você pode querer considerar usar isso:

ip addr show | awk -F'[ /]*' '$2=="inet" && $5=="brd"{print $3}'
    
por 11.07.2016 / 19:52
1

Use ip addr show com -o flag. Por exemplo, aqui estão todos os endereços IPv4 das minhas interfaces conectadas

$ ip -4 -o addr show  | awk '{print $4}'                                                                                 
127.0.0.1/8
10.42.0.1/24
192.168.0.78/24
10.0.3.1/24

Obter apenas endereços específicos que começam com 10. como você pode ser feito dessa maneira:

$ ip -4 -o addr show  | awk '/10\./{print $4}'                                                                           
10.42.0.1/24
10.0.3.1/24

A remoção da notação CIDR pode ser feita da seguinte forma:

$ ip -4 -o addr show  | awk '/10\./{gsub(/\//," ");print $4}'                                                            
10.42.0.1
10.0.3.1
    
por 14.07.2016 / 11:13
1

Para obter todos os IPs inet:

ifconfig -a | grep -oP 'inet \K\S+'

Para obter apenas a família 10.16:

ifconfig -a | grep -oP 'inet \K10\.16\S+'
    
por 14.07.2016 / 09:50
1

Aqui você está:

ifconfig -a | grep -e "inet [0-9]" | cut -d" " -f 2

A maioria das respostas dadas não funciona bem no Mac OS X! A coisa mais fácil que você pode fazer é usar cut ou awk .

    
por 21.07.2016 / 01:08
0

Você pode usar um perl -command como

perl -ne '$_=~/inet\s(\d+\.\d+\.\d+\.\d+)\s/; print $1,"\n"'

Isto usa um regex para encontrar o IP após inet e imprime-o. Apenas canalize sua saída através dele.

Exemplo:

ifconfig -a | grep  10.16 | perl -ne '$_=~/inet\s(\d+\.\d+\.\d+\.\d+)\s/; print $1,"\n"'
    
por 11.07.2016 / 18:36