文本過濾之IP地址精準過濾
在寫之前自己整理了一點自己平時老是搞混的東西,最基礎的就不寫了,前面的東西不想看得一眼代過,就當藉着做IP過濾順便整理下常用的,看看後面如何精準鎖定IP地址吧。
一、正則表達式(PATRERN) 括號() 方括號[] 尖括號<> 大括號{} 的使用
\[\] 匹配指定範圍內的任意單個字符
[^] 用於匹配指定對象之外的任意單個字符
^[] 用於匹配指定對象並且在行首的任意單個字符
\(\) 用作後向引用,也可以用於限定或(\|)的作用域
\1 引用第一個左括號及其與之對應的右括號所包含的所有內容
\2 同理
\3 同理
\< 其後面的任意字符必須作爲單詞的首部出現
\> 其前面的任意字符必須作爲單詞的尾部出現
\<root\> 單詞root必須單獨作爲單詞
\{\} 用於匹配次數
\{m,n\} 匹配其前字符至少m次,至多n次
例:數字開頭數字結尾
grep '\([0-9]\).*\1$' /etc/inittab
用於匹配某一類的任意單個字符 [[:digit:]],[[:lower:]],[[:upper:]],[[:punct:]],[[:space:]],[[:alpha:]],[[:alnum:]]
二、grep(全局搜索),sort(文本統計),cut(文本剪切工具),wc(文本統計),tr(字符處理命令),uniq(顯示重複行,相鄰+相同=重複)
grep [option] pattern [file] [file1] ...
常用 -i -v -o --color -E
-A # 顯示其後#行內容
-B # 其前
-C # 其前後
例:cpu family及其後兩行
grep -A 2 'cpu family' /proc/cpuinfo
sort [option] [file]
-n 數值排序
-r 降序排列
-t 字段分隔符
-k 以哪個字段爲準進行排序
-f 忽略字符大小寫排序
例:
sort -t: -n -k3 /etc/passwd
cut [option] [file]
-d 定義分隔符
-f 與-d一起使用,指定顯示那個區域
-b 以字節爲單位進行分割
-c以字符爲單位進行分割
例:看看變化就知道
netstat -nut | grep ESTAB | awk '{print $5}' netstat -nut | grep ESTAB | awk '{print $5}' | cut -d: -f1
wc [option] [file]
-l 顯示行數
-w 顯示單詞數
-c 顯示字節數
tr [option]
-d 刪除出現在字符集中的所有字符
例:
cat /etc/passwd | tr -d 'a'
uniq [option] [file]
-c 顯示文件中行重複的次數
-d 只顯示重複行
三、(重頭戲)過濾普通IP地址和選定類型的IP地址
樣本:iptest.txt
127.0.0.1s asdfdf
123.0.7.193
wo 23.2.2.3
network127.0.0.1/16 is a bad guy
193.192.168.32
172.168.100.1
普通IP:不建議使用,但是速度稍微快一點
grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9] iptest.txt
A類IP:(B,C類同理)
grep --color '\<\([1-9]\|[1-9][0-9]\|1[01][0-9]\|12[0-7]\)\.\([0-9]\|[1-9][0-9]\|1[0-9][0-9]\|2[0-4][0-9]\|25[0-4]\)\.\([0-9]\|[1-9][0-9]\|1[0-9][0-9]\|2[0-4][0-9]\|25[0-4]\)\.\([0-9]\|[1-9][0-9]\|1[0-9][0-9]\|2[0-4][0-9]\|25[0-4]\)' iptest.txt
定有不足,差錯肯請致郵:[email protected]