2013-11-27 28 views
1

我有一個相當大的文件,其中一列是各種IP地址的列表。我有多個IP範圍需要從這個文件打印。什麼是最好的方法來拉這些範圍。它可以在一個聲明中完成嗎?例如:awk colum或grep用於文件中的多個IP範圍

10.0.0.0/8 
10.102.175.0/28 
10.102.231.0/24 
10.102.79.0/24 
10.102.93.0/30 
10.103.141.0/30 
10.103.141.0/32 
10.103.154.0/26 
10.104.152.0/27 
10.105.25.0/26 
10.107.64.0/24 
10.111.130.0/26 
10.111.147.0/24 
10.111.148.0/24 
10.111.149.0/24 
10.111.150.0/24 
10.27.28.0/24 
172.16.208.0/29 
172.26.92.0/23 
192.1.53.0/24 
192.168.16.0/30 
192.168.55.0/30 
192.200.9.0/24 
+0

是你的文件還是你的預期結果?如果你只是想提取看起來像IP的東西,那應該很容易;假設ipv4,它就像'[0-9] {1,3} \。[0-9] {1,3} \。[0-9] {1,3} \。[0-9 ] {1,3} \/[0-9] {1,3}' – beerbajay

+0

該文件具有實際的IP地址。 IP代表廣域網中不同的子網。我需要從上面粘貼的範圍內的文件中提取IP列表。 – user1999357

+0

grepcidr似乎在Debian上爲我工作。 – user1999357

回答

0

嘗試GNU ERE正則表達式:

(19[01]|1[0-8][0-9]|[1-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])|0\.((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])|0\.((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])|0\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[89])))|192\.((1[0-9]{2}|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])|200\.([0-8]\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])|9\.0)) 

這是一條語句(一行代碼)。