簡體   English   中英

如何使用外殼程序腳本從dhcp.lease文件中提取IP地址,MAC地址和名稱?

[英]How to extract IP address ,MAC address and name from dhcp.lease file with a shell script?

我正在嘗試從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

樣本輸出:

如果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這樣的快速方法? 任何示例代碼?

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]:
  • 將match的計數保存到n ,還將$2/$3/$3到數組a
  • 最后輸出匹配的大小寫n的計數和數組a中的值

以前的awk聲明對我來說似乎過於復雜。 以下更簡單:

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

租約文件采用固定格式,其中僅包含所需的數據,總計數將是記錄數(NR變量)。 將所需的數據讀取到數組數據中,然后打印NR並遍歷數組,打印每個條目。

除了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正則表達式見手冊頁
  • 將輸出重定向到臨時文件/tmp/testFile
  • 使用wc計數/tmp/testFile的行並打印其行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM