shell编程—正则表达式(含网址、邮箱及IP地址的正则表达式!!!)

目录

一、正则表达式是什么?

二、元字符

三、一些常见的正则表达式

1、网址的正则表达式:

2、邮箱的正则表达式:

3、IP地址的正则表达式:

4、时间的正则表达式:

5、总结


一、正则表达式是什么?

        按照某种正确的规则,将字母,数字,特殊符号组成一个公式,用来表达某个意思。

二、元字符
  • ^ 表示以什么开头 

    可以用来把无效行给去掉

     cat /etc/ssh/sshd_config |egrep -v -n "^$|^#"

  • $表示以什么结尾
  • ^$ 代表空行

^huawei$ 表示一行中只有huawei这个词的

  • ? 表示0个或者1个前面的字符:

echo "abc ac abbc"|egrep "ab?c"
只有abc ac满足要求

  • + 表示1个或者多个前面的字符:

echo "abc abbbc ac"|egrep "ab+c"
只有abc abbbc 满足ab+c

  • 使用{}指定出现次数:

ab{4}c就是规定了b只能出现4次
ab{4,}c规定b出现4次以上
ab{4,8}c规定b出现4-8次之间
ab{,8}c规定出现0-8次之间
(ab){,8}c规定ab出现的次数为0-8次之间

  • * 表示0个或者多个前面的字符:

echo "abc abbbc ac"|egrep "ab*c"
abc abbbc ac都满足ab*c

*hello*   #表示包含hello的单词

  • . 表示一个任意字符:

[root@sc-host ~]# cat /etc/passwd |egrep "^n...:"
ncl2:x:9005:9005::/home/ncl2:/bin/bash
ncl3:x:9006:9006::/home/ncl3:/bin/bash
ncl4:x:9007:9007::/home/ncl4:/bin/bash
ncl5:x:9008:9008::/home/ncl5:/bin/bash

  • .*任意个任意字符
  • [  ]组合

[0-9]取0-9之间的任意一个字符
[abc]取abc之中的任意一个字符
[^a-f]不是a-f之间的字符

  • 表示单词以什么开头:

\<chen 表示单词以chen开头
\bchen也表示单词以chen开头

  • 表示单词以什么结尾:

jin\>表示单词以jin结尾
jin\b表示单词以jin结尾

  • 表示一个单词

\<chenjinjin\>

  • 表示长度在16-18的单词

\<[a-Z]{16,18}\>

  • \w  表示下划线,字母,数字
  • \W 表示非下划线,数字,字母,其实就是特殊符号
  • \s 表示空白
  • |表示或
三、一些常见的正则表达式
1、网址的正则表达式:

        [a-z]+://[0-Z]+\.[0-Z]+\.[0-Z]+

2、邮箱的正则表达式:

        [0-Z]+@[0-Z]+\.[0-Z]+

3、IP地址的正则表达式:

        最简单的表示方法(999.999.999.999范围超过了IP地址范围):
               ([0-9]{1,3}\.){3}([0-9]{1,3})

        仅仅表示所有IP地址(255.255.255.255):
        (([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])

        A类地址(1~127):
        ([1-9]|[1-9][0-9]|1[0-1][0-9]|12[0-7])\.(([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])
       

         B类地址(128~191):
        (12[89]|1[3-8][0-9]|19[0-1])\.(([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])
        
        C类地址(192~223):
(19[2-9]|2[0-1][0-9]|22[0-3])\.(([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])

4、时间的正则表达式:

        首先需要确定时间的表达格式:18/Oct/2022:09:55:53,然后就是找规律

        2022年10月1日到10月31日的正则
        ([1-9]|[1-2][0-9]|3[01])/Oct/2022

        2022年10月18日9点到10月18日21点的正则
        18/Oct/2022:(09|1[0-9]|2[01])

        2022年10月18日9点01到10月18日点9点59的正则
        18/Oct/2022:09:(0[1-9]|[1-5][0-9])

        2022年10月18日9点59分00秒到10月18日点9点59分59秒的正则
        18/Oct/2022:09:59:([0-5][0-9])

其实截取时间的话,使用awk命令会更简单:
用法:格式: '/时间/,/时间/'  表示从什么时候到什么时候,不包括端点

显示25/Oct/2022:11:43:06到25/Oct/2022:11:44:32日志
sed -n "/25\/Oct\/2022:11:43:06/,/25\/Oct\/2022:11:44:32/p" access.log

正则表达式做法
sen -n '/25\/Oct\/2022:11:4[3,4]/p' access.log

5、总结

        其实写正则表达式的方法就是找规律,相信如果你多加练习,肯定也能掌握其中精髓

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值