sed -n "/[0-9]\.[0-9]\\.[0-9]\\.[0-9]\/p
" test
這種匹配存在明顯的問題,在正則匹配的過程中,若是出現300,1,255,0;192.168.0. ;192.168,1.1.1這種錯誤的ip位址,任然會被匹配到
在這裡,逛論壇的時候看見一位老哥踩了乙個坑,這裡做 一下記錄
sed -n -r "/((([0-9])|(1[0-9])|(2[0-4][0-9])|(25[0-5]))\.)(([0-9])|(1[0-9])|(2[0-4][0-9])|(25[0-5]))/p
" test
這個正則在匹配前24位 的時候是沒有問題的,然而,在匹配最後8位的時候,會存在乙個讓人很無奈的問題。當你匹配192.168.1.300的時候,是可以匹配到的。為什麼呢?我的正則裡面可是完全沒有大於 255的情況的啊。
原因如下:
在進行前24位匹配的時候使用的是 :
(([0-9])|(1[0-9])|(2[0-4][0-9])|(25[0-5]))\.
若是數字之後沒有點號,那麼是不會匹配成功的,但是,在匹配最後8位的時候,使用的是
(([0-9])|(1[0-9])|(2[0-4][0-9])|(25[0-5]))
當它匹配到30的時候,正則匹配就結束了,這就是為什麼會匹配到300的原因
為了解決匹配到大於255的問題,可以在上乙個sed的結果之後,利用awk對ip的最後8位進行過濾
sed -n -r "/((([0-9])|(1[0-9])|(2[0-4][0-9])|(25[0-5]))\.)/p
" test_1 | awk -f "."
''
正確的IP位址
簡介 ip位址 英語 internet protocol address 是一種在internet上的給主機編址的方式,也稱為網際協議位址。ip位址是ip協議提供的一種統一的位址格式,它為網際網路上的每乙個網路和每一台主機分配乙個邏輯位址,以此來遮蔽實體地址的差異。常見的ip位址,分為ipv4與ip...
匹配IP位址
正規表示式 25 0 5 2 0 4 0 9 0 1 0 9 1 9 0 9 1 9 25 0 5 2 0 4 0 9 0 1 0 9 1 9 0 9 1 9 0 25 0 5 2 0 4 0 9 0 1 0 9 1 9 0 9 1 9 0 25 0 5 2 0 4 0 9 0 1 0 9 1 9 ...
IP位址匹配
問題描述 在路由器中,一般來說 模組採用最大字首匹配原則進行目的埠查詢,具體如下 ip位址和子網位址所帶掩碼做and運算後,得到的值與子網位址相同,則該ip位址與該子網匹配。比如 192.168.1.100 255.255.255.0 192.168.1.0,則該ip和子網192.168.1.0匹配...