Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 从ifconfig获取特定IP的最短方法_Linux_Bash_Grep - Fatal编程技术网

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 }'
  • substr($2,6)
    -从第6个字符开始的第2个字段中提取IP地址(即从
    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)