shell - 当事先不知道行序时,如何可靠地从标准输出中提取特定字符串?
问题描述
该networksetup -listallhardwareports
命令返回 Mac 中所有网络设备的硬件 MAC 地址。
00:0c:29:5b:14:b3
当事先不知道行序(因此我不能使用)时,如何可靠地从标准输出中提取networksetup -listallhardwareports | sed -n 4p | awk '{print $3}'
?
Hardware Port: Wi-Fi
Device: en0
Ethernet Address: 00:0c:29:5b:14:b3
Hardware Port: Bluetooth PAN
Device: en3
Ethernet Address: e1:7e:be:a6:0b:12
解决方案
networksetup -listallhardwareports| awk -v RS= '/en0/{print $NF}'
00:0c:29:5b:14:b3
说明:此awk
命令将所有多行记录转换为单行记录。这是通过取消设置( -v RS=
) awk 的默认记录分隔符( RS
) 来完成的。en0
如果任何行(或记录)中包含字符串,则稍后匹配。
推荐阅读
- jquery - 用户仅在具有特定类名的 div 之前/之后附加
- java - 如何实现 Comparable 接口?
- android - RecyclerView 行中未显示效果
- hadoop - 共享外部配置单元元存储如何依赖特定版本的 HDInsight(Hadoop) 群集?
- php - 如果复选框被禁用,则更改文本颜色
- jquery - $(...).datepicker 不是 Rails 6 中的函数
- javascript - 减少 Typescript/JS 中嵌套对象数组的级别
- mysql - 如何将 MySQL 中的记录设置到 datagridview 的列中?
- image - 没有显示带有 JavaFX 的图像
- php - 使用 php 打印多维数组,数组以关联格式存储