终端命令 | 登录 IP

5 command-line osx grep ip macintosh

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
Run Code Online (Sandbox Code Playgroud)

我已将数字替换为 x

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

10.16.x.xx
10.16.x.xx
Run Code Online (Sandbox Code Playgroud)

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

ter*_*don 8

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

ifconfig -a | grep -oP '\b10\.16\.[0-9.]+\b'
Run Code Online (Sandbox Code Playgroud)

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

ifconfig -a | awk '/10\.16\./ && /inet/{print $2}'
Run Code Online (Sandbox Code Playgroud)

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

ifconfig -a | awk '$1=="inet"{print $2}'
Run Code Online (Sandbox Code Playgroud)

但是,这也会返回127.0.0.1localhost。为避免这种情况,您可以这样做:

ifconfig -a | awk '$1=="inet" && $5=="broadcast"{print $2}'
Run Code Online (Sandbox Code Playgroud)

我没有 mac 来测试这个,但总的来说,ifconfig不推荐使用ip. 您可能需要考虑使用它:

ip addr show | awk -F'[ /]*' '$2=="inet" && $5=="brd"{print $3}'
Run Code Online (Sandbox Code Playgroud)


小智 0

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

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

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

例子:

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