一、正则表达式介绍

正则表达式是一种文本模式匹配,包括普通字符(a...z)和特殊字符(元字符)。

它是一种字符串匹配模式,可以用来检查一个字符串是否含有某种子串、将匹配的子串替换或者从某个字符串中取出某个条件的子串

shell支持正则表达式,但是不是所有的命令都支持正则,常见的命令中只有grep、sed、awk命令支持正则表达式

二、特殊字符

1、定位符使用-模糊匹配与精准匹配:

同时锚定开头和结尾,做精确匹配;单一锚定开发和结尾,做模糊匹配。

定位符 说明
^ 锚定开头^a以a开发,默认锚定一个字符
$ 锚定结尾a$以a结尾,默认锚定一个字符

举例说明:定位符

  1. [root@localhost test20210731]# egrep "^abbbc$" file #正则匹配,等价于grep -e 或 grep -E,精确匹配
  2. abbbc
  3. [root@localhost test20210731]# egrep "^ab" file #匹配开头为ab
  4. abbbc
  5. abababa
  6. abC
  7. [root@localhost test20210731]# egrep "bb$" file #匹配结尾为bb
  8. aabb
  9. &abbb
  10. bbbb

2、匹配符-匹配字符串:

匹配符 说明
. 匹配除回车以外的任意字符
() 字符串分组
[] 定义字符串,匹配括号中的一个字符 
[^] 表示否定括号中出现字符串的字符,取反
\ 转义字符
| 管道-或,结合分组使用

举例说明匹配符:

  1. [root@localhost test20210806]# egrep "^a.c$" file #匹配a开头,c结尾,中间任意字符
  2. aBc
  3. aYc
  4. a*c
  5. a4c
  6. a9c
  7. a7c
  8. [root@localhost test20210801]# egrep "^a[0-9]c$" file #匹配a开头c结尾,中间的字符为0-9
  9. a4c
  10. a9c
  11. a7c
  12. [root@localhost test20210801]# egrep "^a[^0-9]c$" file #匹配a开头c结尾,中间非数字
  13. aBc
  14. aYc
  15. a*c
  16. [root@localhost test20210801]# egrep "^a\*c$" file #精确匹配a*c的情况
  17. a*c
  18. [root@localhost test20210801]# egrep "^a*c$" file #不加转义无法匹配
  19. ac
  20. [root@localhost test20210801]# egrep "^(a|b)c$" file #精确匹配以a或b开头,c结尾
  21. ac
  22. bc

3、限定符-对前面的符合或字符串做限定说明

限定符 说明
* 某个字符之后加星号表示该字符不出现或出现多次
与型号类似,但略有不行,表示该字符出现一次或不出现
+ 与星号类似,表示其前面字符出现一次或多次,但是至少出现一次
{n,m} 某个字符之后出现,表示该字符最少n次,最多m次
{m} 某个字符出现m次

举例说明限定符:

  1. [root@localhost test20210806]# egrep "^ab*c$" file #ab字符中匹配有b(全部需要是b)或没有b
  2. abbbc
  3. ac
  4. [root@localhost test20210806]# egrep "^ab*c$" file #ab字符中匹配有b(全部需要是b)或没有b
  5. abbbc
  6. ac
  7. abc
  8. [root@localhost test20210806]# egrep "^ab?c$" file #ab字符中匹配有b(出现一次)或没有b
  9. ac
  10. abc
  11. [root@localhost test20210806]# egrep "^ab+c$" file #ac字符中匹配有b(至少出现一次)
  12. abbbc
  13. abc
  14. [root@localhost test20210806]# egrep "^ab*c$" file #ac字符中匹配有b(全部需要是b)或没有b
  15. abbbc
  16. ac
  17. abc
  18. [root@localhost test20210806]# egrep "^ab?c$" file #ac字符中匹配有b(出现一次)或没有b
  19. ac
  20. abc
  21. [root@localhost test20210806]# egrep "^ab+c$" file #ac字符中匹配有b(至少出现一次)
  22. abbbc
  23. abc
  24. [root@localhost test20210806]# egrep "^ab{1,3}c$" file #ac字符中匹配有b(出现在1次到3次内)
  25. abbbc
  26. abc
  27. [root@localhost test20210806]# egrep "^ab{3}c$" file #ac字符中匹配有b(正好出现3次)
  28. abbbc

三、POSIX字符

特殊字符 说明
[:alnum:] 匹配任意字母字符0-9 a-z A-Z
[:alpha:] 匹配任意字母,大写或小写
[:dight:] 数字0-9
[:graph:] 非空字符(非空格控制字符)
[:lower:] 小写字符a-z
[:upper:] 大写字符A-Z
[:cntrl:] 控制字符
[:print:] 非空字符(包括空格)
[:punct:] 标点符号
[:blank:] 空格和TAB字符
[:xdigit:] 16进制数字
[:space:] 所有空白字符(新行、空格、制表符)

注意:[[]]双中括号的意思:第一个中括号是匹配符[]匹配中括号中的任意一个字符,第二个[]格式如[:digit:]

举例说明:

  1. [root@localhost tesr20210807]# egrep "^a[[:alnum:]]c$" file #a开头c结尾,中间一个字符匹配非特殊符号
  2. aBc
  3. aYc
  4. a4c
  5. a9c
  6. a7c
  7. abc
  8. [root@localhost tesr20210807]# egrep "^a[[:alnum:]]c$" file #a开头c结尾,中间一个字符匹配任意字母
  9. aBc
  10. aYc
  11. a4c
  12. a9c
  13. a7c
  14. abc
  15. [root@localhost tesr20210807]# egrep "^a[[:alnum:]]c$" file #a开头c结尾,中间一个字符匹配非特殊符号
  16. aBc
  17. aYc
  18. a4c
  19. a9c
  20. a7c
  21. abc
  22. [root@localhost tesr20210807]# egrep ^C]c$" file #a开头c结尾,中间一个字符匹配任意字母
  23. [root@localhost tesr20210807]# egrep "^a[[:alnum:]]c$" file #a开头c结尾,中间一个字符匹配非特殊符号
  24. aBc
  25. aYc
  26. a4c
  27. a9c
  28. a7c
  29. abc
  30. [root@localhost tesr20210807]# egrep "^a[[:alpha:]]c$" file #a开头c结尾,中间一个字符匹配任意字母
  31. aBc
  32. aYc
  33. abc
  34. [root@localhost tesr20210807]# egrep "^a[[:digit:]]c$" file #a开头c结尾,中间一个字符匹配任意数字
  35. a4c
  36. a9c
  37. a7c
  38. [root@localhost tesr20210807]# egrep "^a[[:graph:]]c$" file #a开头c结尾,中间一个字符匹配非空字符
  39. aBc
  40. aYc
  41. a*c
  42. a4c
  43. a9c
  44. a7c
  45. abc
  46. a,c
  47. [root@localhost tesr20210807]# egrep "^a[[:lower:]]c$" file #a开头c结尾,中间一个字符匹配小写字母
  48. abc
  49. [root@localhost tesr20210807]# egrep "^a[[:upper:]]c$" file #a开头c结尾,中间一个字符匹配大写字母
  50. aBc
  51. aYc
  52. [root@localhost test20210807]# egrep "^a[[:blank:]]c$" file #a开头c结尾,中间一个字符为空格或TAB
  53. a c
  54. a c
  55. [root@localhost test20210807]# egrep "^a[[:space:]]c$" file #a开头c结尾,中间匹配所有空白、空行、制表符
  56. a c
  57. a c
  58. [root@localhost test20210807]# egrep "^a[[:blank:]]c$" file #a开头c结尾,中间一个字符为空格或TAB
  59. a c
  60. a c
  61. [root@localhost test20210807]# egrep "^a[[:space:]]c$" file #a开头c结尾,中间匹配所有空白、空行、制表符
  62. a c
  63. a c
  64. [root@localhost test20210807]# egrep "^a[[:blank:]]c$" file #a开头c结尾,中间一个字符为空格或TAB
  65. a c
  66. a c
  67. [root@localhost test20210807]# egrep "^a[[:space:]]c$" file #a开头c结尾,中间一个字符匹配空白、空行、制表符
  68. a c
  69. a c
  70. [root@localhost test20210807]# egrep "^a[[:punct:]]c$" file #a开头c结尾,中间一个字符匹配标点符号
  71. a*c
  72. a,c
  73. [root@localhost test20210807]# egrep "^a[[:print:]]c$" file #a开头c结尾,中间一个字符匹配非空字符(含括号)
  74. aBc
  75. aYc
  76. a*c
  77. a4c
  78. a9c
  79. a7c
  80. abc
  81. a c
  82. a,c
  83. [root@localhost test20210807]# egrep "^a[[:xdigit:]]c$" file #a开头c结尾,中间一个字符匹配十六进制数
  84. aBc
  85. a4c
  86. a9c
  87. a7c
  88. abc

 四、常见正则匹配:

1、数字:^[0-9]*$

2、汉字:^[\u4e00-\u9fa5]{0,}$

3、英文字母:^[A-Za-z]+$

4、手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$

5、IP地址:((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))

更多正则表达式参考:

shell脚本(14)-正则表达式的更多相关文章

  1. shell脚本三——正则表达式

    shell函数:shell中允许将一组命令集合或语句形成一段可用代码,这些代码块称为shell函数.给这段代码起个名字称为函数名,后续可以直接调用该段代码. 格式:fun() { 命令 } Shell ...

  2. shell脚本学习—正则表达式

    正则表达式概念.特点 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”, 这个“规则字符串”用来表达对字符串的一种过滤辑. 给定一个 ...

  3. shell脚本之正则表达式

    具体参考: www.jb51.net/tools/shell_regex.html 正则表达式常用于grep AWK 等工具中

  4. 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式

    正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...

  5. shell脚本 字串截取 正则表达式

    字串处理 子串截取方法一:使用${}表达式格式:echo ${x:起始位置:长度}(起始位置编号从0开始,可省略) 方法二:使用expr substr格式:expr substr "$x&q ...

  6. Shell脚本的编写,sed的使用以及一些正则表达式

    Shell脚本的简单编写以及sed的使用 标签(空格分隔): 博客文章 前一阵子为了批量修改Web审计规则,故编写了一个Shell脚本,顺便使用了下sed,顺便把正则表达式也重新学习一遍,感觉还是需要 ...

  7. shell脚本命令(sotr/unip/tr/cut/eval)与正则表达式

    shell脚本命令(sotr/unip/tr/cut/eval)与正则表达式 1.sort命令 概述: Linux sort命令用于将文本文件内容加以排序. sort命令可针对文本文件的内容,以行为单 ...

  8. Linux shell 脚本攻略之正则表达式入门

    摘自:<Linux shell 脚本攻略> 下面是类似的解释:

  9. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---14

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

随机推荐

  1. Eureka中读写锁的奇思妙想,学废了吗?

    前言 很抱歉 好久没有更新文章了,最近的一篇原创还是在去年十月份,这个号确实荒废了好久,感激那些没有把我取消关注的小伙伴. 有读者朋友经常私信问我: "你号卖了?" "文 ...

  2. 【春节歌曲回味 | STM32小音乐盒 】PWM+定时器驱动无源蜂鸣器(STM32 HAL库)

    l  STM32通过PWM与定时器方式控制无源蜂鸣器鸣响 l  STM32小音乐盒,歌曲进度条图形显示与百分比显示,歌曲切换 l  编程使用STM32 HAL库 l  IIC OLED界面编程,动画实 ...

  3. Kubernetes之job

    1.运行单个任务的pod ReplicationController.ReplicaSet.DaemonSet会持续运行任务,永远达不到完成态 .这些 pod 中的进程在退出时会重新启动.但是在一个可 ...

  4. 27、Tomcat服务的安装与配置

    服务器名称 ip地址 slave-node1 172.16.1.91 27.1. Tomcat简介: Tomcat是Apache软件基金会(Apache Software Foundation)的Ja ...

  5. jquery 选择器 模糊匹配

    根据name值匹配 1.查询前缀为aa的数据 $("div[name^='aa']"); 2.查询后缀为aa的所有div的jquery对象 $("div[name$='a ...

  6. hdu 6048 Puzzle 拼图 逆序数

    关于拼图和逆序数的关系可以看看这个 http://www.guokr.com/question/579400/ 然后求逆序数在判断就行了 按题意生成原始排列,观察发现,每一轮数后方比该数小的数的数量( ...

  7. 笔记 BAT 面试题 及部分答案

    题目出自:https://www.jianshu.com/p/c70989bd5f29本文出自 AWeiLoveAndroid的博客 2018年2月20日星期二 随笔 笔记 BAT 面试题 一.jav ...

  8. PL/SQL语法

    PL/SQL语法 由于pl/sql是编译后执行的,而sql语句是未经编译的,因此pl/sql语句在执行速度上更快,同时也减少了客户机和服务器的传输. 基本结构 DECLARE 声明变量.常量.用户定义 ...

  9. linux学习之路第七天(压缩和解压类指令详解)

    压缩和解压类 1.gzip/gunzip 指令 gzip 指令用于压缩文件, gunzip用于解压的 基本语法 gzip 文件 (功能描述:压缩文件,指令将文件压缩成*.gz文件) gunzip 文件 ...

  10. ReadyAPI 测试工具和创建管理

    通过测试加速API质量APIs 和微服务正在改变组织在数字世界中开展业务的方式,对它们进行测试 比以往任何时候都更加重要 ReadyAPI测试工具是创建.管理.并运行自动化测试REST.SOAP.Gr ...