Linux 从ifconfig获取特定IP的最短方法
我想通过Linux 从ifconfig获取特定IP的最短方法,linux,bash,grep,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:
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)
使用正则表达式:
ifconfig docker | awk '/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/{print $2}'
如果机器是linux,您可以使用
hostname -i
使用单个awk过程:
ifconfig docker0 | awk '/inet:/{ print substr($2,6); exit }'
-从第6个字符开始的第2个字段中提取IP地址(即从substr($2,6)
-->inet:172.17.0.1
)172.17.0.1
输出将是(在您的情况下):
使用grep的
-p
标志启用perl
regex并四处查看 我们可以使用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)
docker
部分中的inet
有两个匹配项:inet:172.17.0.1…
和inet6:…
。应该保留哪一个?通过ifconfig
,您只能获得与所需接口相关的信息,因此,如果您只需要接口docker0的输出,ifconfig docker0
将更容易在以后进行解析。@RomanPerekhrest在我的例子中只有一个,但以防万一,它应该显示第一个。堆栈溢出是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参见帮助中心中的。也许或者会是一个更好的提问的地方。
ip -o -br -4 addr show dev docker0
ip_addr=$(ip -o -br -4 addr show dev docker0 | tr -s ' /' '\t\t' | cut -f3)