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

相关推荐

  • kickstart安装系统

    很多时候要安装很多机器是很繁琐,我们可以利用kickstart网络启动更加方便的去安装系统。 首先准备环境,安装相关程序。 [root@localhost ~]# yum -y install sytem-config-kickstart [root@localhost ~]# yum&n…

    Linux干货 2016-09-19
  • lvm的应用

    前言    lvm是logical volume manager(逻辑卷管理器)的简称,通过将若干个磁盘分区连接成一个整块的卷组(volumegroup),形成一个存储池,管理员可以在卷组上随意创建逻辑卷(logicalvolumes),并进一步在逻辑卷组上创建文件系 统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按…

    Linux干货 2016-05-23
  • 马哥教育网络班22期第四周课程练习1

    1.cp -r /etc/skel/ /home/tuser1 && chmod -R 600  /home/tuser1 2.max=`cat /etc/group |awk -F":" '{print $3}'|sort -nr| head -n1`|sed -i '$a had…

    Linux干货 2016-09-05
  • Week2–Linux基础三

    一. Linux上的文件管理类命令都有哪些,其常用的使用方法和例子是啥呢? 文件管理类命令大概就是这些: ls, cd, pwd, mkdir, rmdir, cp, rm, mv, touch, cat, more, less, head, tail, file, grep. 目录或文件操作类: 1. ls: (查看文件名命令) -a :全部的文件,连同隐…

    Linux干货 2016-12-12
  • 脚本进阶

    1、写一脚本,用ping命令测试192.168.1.1-192.168.1.10之间的所有主机的在线状态,在线的主机使用绿色表示,不在线的主机使用红色表示   2、如何给网络配置多个地址,有哪些方式   3、写一个脚本 (1)假设某目录(/etc/rc.d/rc3.d/)下分别有K开头的文件和S开头的文件若干 (2)显示所有以K开头的文件…

    2018-01-08
  • 马哥教育网络班22期第3周课程作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@MyCloudServer ~]# who | cut -d " " -f1 |sort -u root 2、取出最后登录到当前系统的用…

    Linux干货 2016-09-19