使用 grep 通过 MacOs ifconfig 只有接口名称和 MAC 地址
Using grep to have only interface name and MAC address over MacOs ifconfig
我正在使用 MacOS 并对其进行管理,我只想通过使用 grep 列表来获取
接口名称和地址
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
有人对我有更充分的准备吗?
这可能会让你们更接近:
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 正在查找包含数字的字符串。因此,ether 从匹配字符串中省略。当然,这不是一个很通用的解决方案。
当然,如果你想使用 shell 替换回抽动(或更好的 $()
):
ifconfig | echo $( grep -o '\b[0-9a-z:]*[0-9]\b' )
读取 ifconfig
输出的简单 Perl 脚本将起作用。我们将实例名称 ($inst
) 定义为一行开始并以冒号和一个或多个空格结束的字符。满足此条件的匹配项将被保存并继续读取循环。当一行以一个或多个空格开头并且遇到标记 ether
时,我们打印实例名称和刚刚读取的行。
ifconfig|perl -ne 'if (m/^(.+):\s+/) {$inst=};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
-only 解析,这将产生粗略的提取,然后可以进一步处理:
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
我正在使用 MacOS 并对其进行管理,我只想通过使用 grep 列表来获取
接口名称和地址
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
有人对我有更充分的准备吗?
这可能会让你们更接近:
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 正在查找包含数字的字符串。因此,ether 从匹配字符串中省略。当然,这不是一个很通用的解决方案。
当然,如果你想使用 shell 替换回抽动(或更好的 $()
):
ifconfig | echo $( grep -o '\b[0-9a-z:]*[0-9]\b' )
读取 ifconfig
输出的简单 Perl 脚本将起作用。我们将实例名称 ($inst
) 定义为一行开始并以冒号和一个或多个空格结束的字符。满足此条件的匹配项将被保存并继续读取循环。当一行以一个或多个空格开头并且遇到标记 ether
时,我们打印实例名称和刚刚读取的行。
ifconfig|perl -ne 'if (m/^(.+):\s+/) {$inst=};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
-only 解析,这将产生粗略的提取,然后可以进一步处理:
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