从ifconfig
输出中提取MAC地址的最佳方法是什么?
样本输出:
bash-3.00# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 1F:2E:19:10:3B:52 inet addr:127.0.0.66 Bcast:127.255.255.255 Mask:255.0.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 .... ....
我应该使用cut,AWK还是其他任何东西,以及一种方法相对于另一种方法的优点和缺点.
你可以做一只猫 /sys/class/
cat /sys/class/net/*/address
专门为 eth0
cat /sys/class/net/eth0/address
我会用:
ifconfig eth0 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'
-o将导致grep仅打印与表达式匹配的行的部分. [[:xdigit:]]{1,2}
将匹配1或2个十六进制数字(Solaris不输出前导零).
我喜欢使用/ sbin/ip来完成这些任务,因为它更容易解析:
$ ip link show eth0 2: eth0:mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:0c:29:30:21:48 brd ff:ff:ff:ff:ff:ff
您可以使用awk从此输出中轻松获取mac地址:
$ ip link show eth0 | awk '/ether/ {print $2}' 00:0c:29:30:21:48
如果你想付出更多的努力,并解析更多的数据,我建议使用ip命令的-online参数,这将让你将每一行视为一个新设备:
$ ip -o link 1: lo:mtu 16436 qdisc noqueue \ link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000\ link/ether 00:0c:29:30:21:48 brd ff:ff:ff:ff:ff:ff 3: eth1: mtu 1500 qdisc pfifo_fast qlen 1000\ link/ether 00:0c:29:30:21:52 brd ff:ff:ff:ff:ff:ff 4: tun0: mtu 1500 qdisc pfifo_fast qlen 100\ link/[65534] 5: sit0: mtu 1480 qdisc noop \ link/sit 0.0.0.0 brd 0.0.0.0
不确定是否确实有任何优势,但你可以简单地使用awk:
ifconfig eth0 | awk '/HWaddr/ {print $5}'