Grepping e sedding IP do show ip addr

2

Estou tentando obter apenas o IP local da minha VM do Arch. Eu consegui apenas a linha contendo o que eu quero com o grep, mas também quero reduzi-lo com sed.

inet <<192.168.0.16>>/24 brd 192.1680.255 scope global enp0s3 $ I want the IP in <<>>
ip addr show | grep 'inet\ ' | sed -n -e 's/^.*inet\ (.*)\/.*$//p'
-n     # print nothing by default
s      # replacement command
^      # begin line
.*     # anything
inet\  # inet and then a space
(.*)   # capture anything
\/     # end capture at the / that comes before 24
.*     # anything
$      # end
     # replace all that with the first capture group which should be the IP
p      # print the output

Mas assim que eu adiciono o sed, isso não me dá nada. Eu suponho que algo está errado com o meu regex - eu não sou de modo algum um especialista em regex, mas eu já sabia disso por um tempo.

    
por Rogue 28.11.2015 / 22:47

1 resposta

4

Isso é mais fácil de fazer com awk do que grep e sed :

ip addr show eth0 | awk '/inet / {print $2}'

Se você quiser remover a máscara de rede do CIDR do IP:

ip addr show eth0 | awk '/inet / {gsub(/\/.*/,"",$2); print $2}'

Observe que uma interface pode ter mais de um endereço IP - por exemplo, ip addr show br0 | awk '/inet / {print $2}' no meu sistema tem 11 endereços IPv4, sendo alguns deles endereços IP públicos e alguns deles endereços privados RFC1918.

    
por 28.11.2015 / 23:05