Shell 当行顺序为’;我事先不知道?
Shell 当行顺序为’;我事先不知道?,shell,Shell,networksetup-listallhardwareports命令返回MAC中所有网络设备的硬件MAC地址 当行顺序事先未知时(因此我无法使用networksetup-listallhardwareports | sed-n4p | awk'{print$3}'),如何可靠地从标准输出中提取00:0c:29:5b:14:b3 硬件端口:Wi-Fi 设备:en0 以太网地址:00:0c:29:5b:14:b3 硬件端口:蓝牙PAN 装置:en3 以太网地址:e1:7e:be:a6:0b:12
networksetup-listallhardwareports
命令返回MAC中所有网络设备的硬件MAC地址
当行顺序事先未知时(因此我无法使用networksetup-listallhardwareports | sed-n4p | awk'{print$3}'),如何可靠地从标准输出中提取00:0c:29:5b:14:b3
硬件端口:Wi-Fi
设备:en0
以太网地址:00:0c:29:5b:14:b3
硬件端口:蓝牙PAN
装置:en3
以太网地址:e1:7e:be:a6:0b:12
说明:此awk
命令正在将所有多行记录转换为单行记录。这是通过取消设置(-vrs=
)awk的默认记录分隔符(RS
)来完成的。如果任何行(或记录)中包含en0
字符串,则稍后进行匹配。这里有一个稍微不同的扭曲,它不连接行,而只是使用一个简单的标志指示找到en0
作为第二个字段,然后在下一行输出最后一个字段并退出:
networksetup -listallhardwareports |
awk '$2=="en0" { nextmac=1; next } nextmac==1 {print $NF; exit}'
00:0c:29:5b:14:b3
这两种方法都很好,只是对我来说,处理每条记录比加入它们更容易一些。6比1等于1/2打。您是想同时提取mac还是只提取en0
?您是只提取00:0c:29:5b:14:b3
还是所有mac地址?(或仅用于wifi,或仅用于蓝牙?@P。。。。仅适用于en0
设备。@DavidC.Rankin仅适用于en0
Wi-Fi设备。{$1=$1;}
做什么?似乎很没用。在这种特殊情况下,它不是必需的,但是,它用于将每条记录转换为一行。@P。。。。这太神奇了。请您把它分解一下,解释一下awk
参数是如何工作的好吗?@sunknudsen这里每个eth接口的多行记录都使用-v RS=
转换成一行,$NF
是mac地址,意味着每个记录的最后一个字段。我建议运行此命令以查看RS的行为被设置为空白
networksetup-listallhardwareports | awk-v RS='{$1=$1}1'`感谢您添加到对话中。我同意另一个答案是令人费解的。实际上,这是一种巧妙的方法,它只是将每个设备的所有3行分组为一个记录(通过取消设置RS
--记录分隔符),并在该组行中找到“en0”
,则选择最后一个字段。文件中的空白行分隔组。
networksetup -listallhardwareports |
awk '$2=="en0" { nextmac=1; next } nextmac==1 {print $NF; exit}'
00:0c:29:5b:14:b3