-
用正則表達式表示IP地址
首先來分析一下,制IP地址是一個32位的二進制數,通常被分割為4個“8位二進制數”(也就是4個字節)。IP地址通常用“點分十進制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之間的十進制整數。例:點分十進IP地址(100.4.5.6),實際上是32位二進制數(01100100.00000100.00000101.00000110)。ip每一位的值0-255,用數值來匹配,我會分成一位數值,兩位數值的,和三位數值的,還有一個地方需要注意,那就是取255的時候不能取到259,這樣就超出了范圍,具體如下:
ifconfig|grep -Eo –color=auto "\<([0-9]|[1-9][0-9]|1[0-9}{2}|2[0-4][0-9]|25[0-5])\>\.\<([1-9]|[1-9][0-9]|1[0-9}{2}|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9}{2}|2[0-4][0-9]|25[0-5])\>\.\<([1-9]|[1-9][0-9]|1[0-9}{2}|2[0-4][0-9]|25[0-5])\>"
ifconfig |grep -Eo "(\<([0-9]|1[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]\>)\.){3}(\<[0-9]|1[0-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]\>)" –color=auto
ifconfig | grep -o '\b[0-9]\{1,3\}\b\.\b[0-9]\{1,3\}\b\.\b[0-9]\{1,3\}\b\.\b[0-9]\{1,3\}\b'
哇塞這也太長了把,對沒錯是很長,好現在我來拆分來講解下
[0-9]:這個很容易理解,表示的是一位數,正則表達式中一位表示的意思匹配任意單個字符,那我[1-9]匹配的就是從0到10的數字。
[1-9][0-9]:這個表示的是兩位數字,兩個中括號就必須要匹配兩個數字,個位數[0-9]可以隨意變換,十位數也是如此,個位數和十位數隨意組合就成了從10-99之間的數字了。
1[0-9]{2}:這個表示的是三位數,百位數是1,十位數從0到9隨意變換,個位數也是如此,最終隨意組合組成的數值就是從100-199的數值了。
2[0-4][0-9]:這個就有點特殊了,因為ip的最大值是255,我要是直接這樣匹配2[0-5[0-9],這個數字就到259了直接超出范圍,我把十位數限制在4,個位數可以隨意變換,最終組成的數值就是200-249了。
25[0-5]:這次我直接把百位數和十位數給指定,個位數就在0-5之間隨意變換,最大的數值固定在255,最終組成的數值就是250-255了。
ip地址由4位十進制數值組成了,把匹配的項分組四組,但是ip地址之間是有個“.”的,“.”在正則表達式中表示任意單個字符,這里就需要用“\”來進行轉意了,最終組成成四組就是匹配ip地址了。
2. 用正則表達式表示手機號
grep -Eo "^\<1[3578][0-9]{9}\>"
grep -Eo"\<(139|138|137|135|134|159|158|157|150|151|152|188|130|131|
132|156|155|133|153|189)[0-9]{9})\>" filname
grep -Eo "\<(13[0-9]|15[[01356789]|18[01235789])[0-9]{8} filename
固定前三位號碼段,后面9位數字隨機變換。
3.用正則表達式表示身份證號18
我國現行的二代身份證號碼是按國家質量技術監督局于1999年7月1日實施的GB11643-1999《公民身份號碼》標準執行的。由17位數字本體碼和
1位校驗碼組成。排列順序從左至右依次為:6位數字地址碼,8位數字出生日期碼,3位數字順序碼和1位校驗碼,地址碼的第一位數值的取值范圍是1-8,這里的年份我從1900至2099,身份證具體編碼規則:http://baobao.sohu.com/20160512/n449226463.shtml
grep -Eo "\<((1[1-5])|(2[1-3])|(3[1-7])|(4[1-6])|(5[0-4])|(6[1-5])|(71|81|82))([0-9]){4}(19|20)([0-9]){2}((0[0-9])|(1[0-2]))(0[1-9]|(1[0-9])|(2[0-9])|(3[0-1]))([0-9]){3}([0-9]|x)\>"
4、用正則表達式表示郵箱
郵箱的格式是由用戶@主機名組成,通常為username@servername.com
cat mail|egrep "\<([[:alnum:]]+(-|_)*[[:alnum:]]*)\>@([[:alnum:]]+\.)+[[:alnum:]]+"
郵箱格式由大小寫字母數字下劃線等組成,alnum是數字字母的組合,讓他匹配多次,橫杠和下劃線可有可無,所以用*來匹配,主機名也是有數字字母中間中間還有個“.”點這個地方需要轉意,不然表示的就是任意的單個字符了
原創文章,作者:fszxxxks,如若轉載,請注明出處:http://www.www58058.com/30638