使用grep在MacO上仅具有接口名称和MAC地址ifconfig

问题描述 投票:1回答:2

我使用的是MacOS,要对其进行管理,只希望通过使用grep列表来获得

接口名称和macaddress

lo0 ether 00:00:00:00:00:00 
gif0 ether 00:00:00:00:00:00 
stf0 ether 00:00:00:00:00:00 
en0 ether 00:00:00:00:00:00 
en5 ether 00:00:00:00:00:00 
en1 ether 00:00:00:00:00:00 
en2 ether 00:00:00:00:00:00 
en3 ether 00:00:00:00:00:00 
en4 ether 00:00:00:00:00:00 
utun0 ether 00:00:00:00:00:00

我尝试过广告,尝试过一些我写过的命令,我能做的最好的是:

ifconfig | echo `grep -oE '^[a-zA-Z]{1,4}[0-9]{1,4}'`

output:

lo0 gif0 stf0 en0 en5 en1 en2 en3 en4 utun0

有人为我准备好了吗?

bash macos mac-address ifconfig
2个回答
1
投票

一个简单的Perl脚本可以读取ifconfig的输出。我们将实例名称($inst)定义为以一行开头,以冒号和一个或多个空格结尾的字符。符合此条件的匹配将被保存,并且读取循环继续。当一行以一个或多个空格开头并且遇到令牌ether时,我们将打印实例名称和刚刚读取的行。

ifconfig|perl -ne 'if (m/^(.+):\s+/) {$inst=$1};if (m{^\s+ether}) {print $inst,$_}'
en0     ether 34:15:9e:23:7b:78 
en1     ether 7c:6d:62:73:ff:4e 
p2p0    ether 0e:6d:62:73:ff:4e 

如果坚持仅grep解析,将产生粗略的提取,然后可以对其进行进一步处理:

ifconfig|grep -Eo '^[0-9a-z]+:|ether.+'|grep -B1 -Eo 'ether.+'|grep -v -- "--"|paste - -

en0:    ether 34:15:9e:23:7b:78 
en1:    ether 7c:6d:62:73:ff:4e 
p2p0:   ether 0e:6d:62:73:ff:4e 

-1
投票

这可能会使您更接近一点:

grep -o '\b[0-9a-z:]*[0-9]\b' 

但是输出中包含新行:

lo0
00:00:00:00:00:00
gif0
00:00:00:00:00:00
stf0
00:00:00:00:00:00
en0
00:00:00:00:00:00
en5
00:00:00:00:00:00
en1
00:00:00:00:00:00
en2
00:00:00:00:00:00
en3
00:00:00:00:00:00
en4
00:00:00:00:00:00
utun0
00:00:00:00:00:00

但是,如果允许使用xargs,则可以得到一个界面和mac都在同一行的解决方案:

grep -o '\b[0-9a-z:]*[0-9]\b'  | xargs -L2
lo0 00:00:00:00:00:00
gif0 00:00:00:00:00:00
stf0 00:00:00:00:00:00
en0 00:00:00:00:00:00
en5 00:00:00:00:00:00
en1 00:00:00:00:00:00
en2 00:00:00:00:00:00
en3 00:00:00:00:00:00
en4 00:00:00:00:00:00
utun0 00:00:00:00:00:00

grep正在寻找包含数字的字符串。因此,以太币从匹配的字符串中省略了。当然,这不是一个非常通用的解决方案。

当然,如果您要使用Shell替代反向tic(或更好的$() ::

 ifconfig | echo $( grep -o '\b[0-9a-z:]*[0-9]\b'  )
© www.soinside.com 2019 - 2024. All rights reserved.