终端命令 |查询 IP 地址

终端命令 |查询 IP 地址
ifconfig -a | grep  10.16
     inet 10.16.x.xx netmask 0xffffff00 broadcast 10.16.x.xxx
     inet 10.16.x.xx netmask 0xffffff80 broadcast 10.16.x.xxx

我已将数字替换为x

我的目标是删除除 inet IP 之外的所有内容。所以它只是显示为:

10.16.x.xx
10.16.x.xx

这可能吗?同时保持命令尽可能简单,并使其能够跨多个操作系统(10.9/10.10/10.11)

答案1

好吧,如果你知道你的 IP 以 开头10.16,那就很简单了:

ifconfig -a | grep -oP '\b10\.16\.[0-9.]+\b'

或者,如果您grep不支持-P-o

ifconfig -a | awk '/10\.16\./ && /inet/{print $2}'

如果没有,您可以找到以以下内容开头的所有行inet并打印其第二个字段:

ifconfig -a | awk '$1=="inet"{print $2}'

然而,这也会返回127.0.0.1localhost。为了避免这种情况,你可以这样做:

ifconfig -a | awk '$1=="inet" && $5=="broadcast"{print $2}'

我没有 Mac 来测试这个,但总的来说,ifconfig它正在被弃用,取而代之的是ip.您可能需要考虑使用它:

ip addr show | awk -F'[ /]*' '$2=="inet" && $5=="brd"{print $3}'

答案2

ip addr show与标志一起使用-o。例如,这是我连接的接口的所有 IPv4 地址

$ ip -4 -o addr show  | awk '{print $4}'                                                                                 
127.0.0.1/8
10.42.0.1/24
192.168.0.78/24
10.0.3.1/24

10.可以通过以下方式仅获取以您的开头的特定地址:

$ ip -4 -o addr show  | awk '/10\./{print $4}'                                                                           
10.42.0.1/24
10.0.3.1/24

可以像这样删除 CIDR 表示法:

$ ip -4 -o addr show  | awk '/10\./{gsub(/\//," ");print $4}'                                                            
10.42.0.1
10.0.3.1

答案3

获取所有inet IP:

ifconfig -a | grep -oP 'inet \K\S+'

为了获得 10.16 家庭:

ifconfig -a | grep -oP 'inet \K10\.16\S+'

答案4

你可以使用perl- 命令,例如

perl -ne '$_=~/inet\s(\d+\.\d+\.\d+\.\d+)\s/; print $1,"\n"'

这使用正则表达式来查找IP内网并打印它。只需通过它传输您的输出即可。

例子:

ifconfig -a | grep  10.16 | perl -ne '$_=~/inet\s(\d+\.\d+\.\d+\.\d+)\s/; print $1,"\n"'

相关内容