从ifconfig获取特定IP的最短方法

时间:2017-10-24 12:36:54

标签: linux bash grep

我希望使用ifconfig上的单个命令隔离某个linux接口的IP,以将其用作命令中的参数。

以下命令正在运行:

ifconfig | grep -A1 docker | grep inet | cut -d ':' -f2 | cut -d ' ' -f1

但我想知道是否有更短更好的方法。

重要:它必须适用于任何欧洲语言配置。例如,ifconfig的西班牙语输出如下:

docker0   Link encap:Ethernet  direcciónHW 02:42:b2:ff:14:5b  
          Direc. inet:172.17.0.1  Difus.:0.0.0.0  Másc:255.255.0.0
          Dirección inet6: fe80::42:b2ff:feff:145b/64 Alcance:Enlace
          ACTIVO DIFUSIÓN MULTICAST  MTU:1500  Métrica:1
          Paquetes RX:12569 errores:0 perdidos:0 overruns:0 frame:0
          Paquetes TX:32629 errores:0 perdidos:0 overruns:0 carrier:0
          colisiones:0 long.colaTX:0 
          Bytes RX:698734 (698.7 KB)  TX bytes:46670727 (46.6 MB)

enp4s0    Link encap:Ethernet  direcciónHW f0:bf:97:57:17:17  
          ACTIVO DIFUSIÓN MULTICAST  MTU:1500  Métrica:1
          Paquetes RX:0 errores:0 perdidos:0 overruns:0 frame:0
          Paquetes TX:0 errores:0 perdidos:0 overruns:0 carrier:0
          colisiones:0 long.colaTX:1000 
          Bytes RX:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupción:18 

lo        Link encap:Bucle local  
          Direc. inet:127.0.0.1  Másc:255.0.0.0
          Dirección inet6: ::1/128 Alcance:Anfitrión
          ACTIVO BUCLE FUNCIONANDO  MTU:65536  Métrica:1
          Paquetes RX:3681 errores:0 perdidos:0 overruns:0 frame:0
          Paquetes TX:3681 errores:0 perdidos:0 overruns:0 carrier:0
          colisiones:0 long.colaTX:1000 
          Bytes RX:343046 (343.0 KB)  TX bytes:343046 (343.0 KB)

4 个答案:

答案 0 :(得分:0)

使用正则表达式:

ifconfig docker | awk '/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/{print $2}'

如果机器是linux,你可以使用

hostname -i

答案 1 :(得分:0)

使用单个 awk 进程:

ifconfig docker0 | awk '/inet:/{ print substr($2,6); exit }'
  • substr($2,6) - 从第6个字符开始从第2个字段中提取IP地址(即来自inet:172.17.0.1 - > 172.17.0.1

输出将是(在您的情况下):

172.17.0.1

答案 2 :(得分:0)

ifconfig docker |grep -oP 'inet:\K[^ ]+'
172.17.0.1

使用grep的-P标志启用perl正则表达式并环顾四周。

答案 3 :(得分:0)

我们可以使用 ip 命令,其输出旨在是机器可读的:

ip -o -br -4 addr show dev docker0

我们想要从第三组空格中提取,直到/24

ip_addr=$(ip -o -br -4 addr show dev docker0  | tr -s ' /' '\t\t' | cut -f3)