首页 文章

如何使用shell脚本从dhcp.lease文件中提取IP地址,MAC地址和名称?

提问于
浏览
-1

我试图从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 devicesMAC addressIP addressDevice 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 回答

  • 1

    以前的awk声明对我来说似乎过于复杂 . 以下更简单:

    awk '{ dat[NR]=$2"/"$3"/"$4 } END { print NR;for ( i=1;i<=NR;i++) { print dat[i] } }'  /tmp/dhcp.lease
    

    租约文件采用固定格式,只包含所需数据,总计数将是记录数(NR变量) . 读取数组dat中所需的数据,然后打印NR并循环打印每个条目的阵列 .

  • 1

    除了 awk 之外,您可以使用 grepregex 并使用临时文件,您将保存匹配的输出以进一步计算其行并显示如下示例:

    ~$ cat /tmp/dhcp.leases | grep -oE "([0-9A-Z]{2}:){5}[0-9A-Z]{2}.*([0-9]{1,3}\.){3}[0-9]{1,3}.*[a-zA-Z]{3,}[0-9]+?" | tr ' ' '/' > /tmp/testFile
    ~$ cat /tmp/testFile | wc -l; cat /tmp/testFile
    

    输出:

    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
    

    说明:

    • grep -oE:打印 o nly匹配行的匹配(非空)部分并使用 E xtended regexp,参见man page .

    • 将输出重定向到文件文件 /tmp/testFile .

    • 使用 wc 计算 /tmp/testFile 的行并打印其行 .

  • 0

    awk 命令可以帮到你 .

    $ awk -v OFS='\n' '$2 ~ /[0-9A-Z]:/{n=n+1;a[n]=$2"/"$3"/"$4} END{print n==""?0:n; for(i in a)print a[i]}' /tmp/dhcp.leases
    

    简要说明,

    • 打印 $2 与正则表达式匹配的行 [0-9A-Z]:

    • 将匹配计数保存到 n ,并将 $2/$3/$3 保存到数组 a

    • 打印匹配的情况 n 的数量和数组 a 中的值到底

相关问题