0804正则表达式作业

  1. 用正则表达式表示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地址了。

1.jpg

QQ截图20160808092710.jpg

3.jpg

    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位数字随机变换。

1.jpg

        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)\>"

1.png


        4、用正则表达式表示邮箱

      邮箱的格式是由用户@主机名组成,通常为username@servername.com

      cat mail|egrep "\<([[:alnum:]]+(-|_)*[[:alnum:]]*)\>@([[:alnum:]]+\.)+[[:alnum:]]+"

      邮箱格式由大小写字母数字下划线等组成,alnum是数字字母的组合,让他匹配多次,横杠和下划线可有可无,所以用*来匹配,主机名也是有数字字母中间中间还有个“.”点这个地方需要转意,不然表示的就是任意的单个字符了

2.png



       

原创文章,作者:fszxxxks,如若转载,请注明出处:http://www.178linux.com/30638

(0)
fszxxxksfszxxxks
上一篇 2016-08-10
下一篇 2016-08-10

相关推荐

  • 【社招】【小米-北京】大数据运维工程师

    【社招】【小米-北京】大数据运维工程师 【工作地点】北京市海淀区安宁庄东路72号科利源大厦 【薪酬福利】15k-30k  期权奖励、六险一金、水果花茶、班车、健身房、食堂 【投递方式】邮件主题“岗位+姓名”发送至lipengcheng3@xiaomi.com   工作职责: 1、负责大数据平台相关系统的运维保障,包括:Hadoo…

    Linux干货 2017-07-28
  • 简单易懂的CentOS启动流程

    在使用Linux操作系统时,我们只需要按下电源键,等待一会儿,登录终端就呈现在我们眼前,在这段时间内,操作系统究竟做了哪些事情? 先上一张流程梗概图,你会对启动流程有个大致的了解 启动流程详解 POST加电自检   主板在接通电源后,系统首先由POST程序来对CPU、主板、内存、硬盘子系统、显示子系统串并行接口、键盘、CD-ROm光驱等硬件进行检测 读取MB…

    Linux干货 2016-09-11
  • N25-第8周博客作业

    第八周 1、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态; 在线的主机使用绿色显示; 不在线的主使用红色显示; #!/bin/bash # ip=172.16.250. for i in {1..254}; do if ping -w 1 -c 1 $ip$i &> /dev/n…

    Linux干货 2017-03-10
  • Linux学习总结01—操作系统与硬件介绍(原创)

      在计算机中,分为以下结构,运算器,控制器,存储器,输入、输出设备,运算器和控制起的整个就形成了中央处理器(称作为CPU),而cpu的功能就是提供运算,运算的数据都是经由控制器而来,控制器其实是往主存储器中取得数据,内存中的数据是由用户来输入的,其运算的结果通过控制器存储在内存当中,之后可以根据用户的指令输出在一个设备当中(例如显示器),我们都知…

    Linux干货 2016-10-29
  • 标准I/O和管道

    程序包含指令和数据,经常需要读入数据和输出数据 打开的文件都有一个fd:file descriptor(文件描述符) 用nano打开一个文件,查看其PID  0,1,2就是所谓的文件描述符。 在Linux里输入输出和错误都由这三个描述符来表示 标准输入(STDIN) -0 默认接受来自键盘的输入 标准输出(STDOUT)-1 默认输出到终端窗口 标…

    Linux干货 2016-08-08
  • 第三周作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost /]# who | cut -d ‘ ‘ -f 1  | sort -u root user1 或: [root@localhost /]# who | cut -d ‘ ‘ -…

    Linux干货 2017-02-24