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)
好吧,如果你知道你的 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)