我试图从openwrt中的/tmp/dhcp.lease解析dhcp.lease文件 .
root@OpenWrt:/# cat /tmp/dhcp.leases
1568953482 70:B3:D5:14:D0:31 192.168.3.51 device1 01:70:B3:D5:14:D0:31
2867821468 38:B8:EB:10:00:22 192.168.5.93 device2 01:38:B8:EB:10:00:22
8984532872 00:01:0A:33:11:33 192.168.5.44 CISCOee 01:00:01:0A:33:11:33
Where, 2nd column - MAC address , 3rd column - IP address and 4th column- Name
我想运行一个shell脚本来解析此dhcp.lease列表中的 No of devices
, MAC address
, IP address
和 Device Name
.
sample output :
如果 dhpcp.lease
文件中有 3 device
列表,我想打印输出如:
3
70:B3:D5:14:D0:31/192.168.3.51/device1
38:B8:EB:10:00:22/192.168.5.93/device2
00:01:0A:33:11:33/192.168.5.44/CISCOee
如果没有找到设备列表,则应该返回
0
我可以用简单的文件内容迭代吗?或者像sed / awk这样的快速方法?任何示例代码?
3 回答
以前的awk声明对我来说似乎过于复杂 . 以下更简单:
租约文件采用固定格式,只包含所需数据,总计数将是记录数(NR变量) . 读取数组dat中所需的数据,然后打印NR并循环打印每个条目的阵列 .
除了
awk
之外,您可以使用grep
和regex
并使用临时文件,您将保存匹配的输出以进一步计算其行并显示如下示例:输出:
说明:
grep -oE:打印
o
nly匹配行的匹配(非空)部分并使用E
xtended regexp,参见man page .将输出重定向到文件文件
/tmp/testFile
.使用
wc
计算/tmp/testFile
的行并打印其行 .awk
命令可以帮到你 .简要说明,
打印
$2
与正则表达式匹配的行[0-9A-Z]:
将匹配计数保存到
n
,并将$2/$3/$3
保存到数组a
打印匹配的情况
n
的数量和数组a
中的值到底