我希望使用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)
答案 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)