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.1
localhost。为了避免这种情况,你可以这样做:
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"'