一、前言

1.1、名词解释

正则表达式(regular expression, RE)是一种字符模式,用于在查找过程中匹配指定的字符。
在大多数程序里,正则表达式都被置于两个正斜杠之间;例如/l[oO]ve/就是由正斜杠界定的正则表达式
它将匹配被查找的行中任何位置出现的相同模式。在正则表达式中,元字符是最重要的概念。

1.2、工具

被vim、sed、awk、grep调用

1.3、场景

mysql、oracle、php、python ,Apache,Nginx...  需要正则

1.4、回顾

  1. 示例
  2. 需求
  3. 匹配数字的脚本:用户输入创建账号的数量
  4. 语法
  5. [[ ^[0-9]+$ ]]
  6. 示范
  7. read -p "输入数字才退出: " num
  8. while :
  9. do
  10. if [[ ! $num =~ ^[0-9]+$ ]];then
  11. echo "error enter!"
  12. read -p "输入数字才退出:" num
  13. else
  14. echo "thank you"
  15. exit 1
  16. fi
  17. done

二、元字符

定义:元字符是这样一类字符,它们表达的是不同于字面本身的含义

2.1、基本正则表达式元字符

^   行首定位符

  1. [root@localhost ~]# grep "root" /etc/passwd
  2. root:x:0:0:root:/root:/bin/bash
  3. operator:x:11:0:operator:/root:/sbin/nologin
  4. [root@localhost ~]# grep "^root" /etc/passwd
  5. 为什么什么少一行?
  6. root:x:0:0:root:/root:/bin/bash

$   行尾定位符

  1. love$

.   匹配任意单个字符

  1. [root@localhost ~]# grep abc 1.txt
  2. abc
  3. [root@localhost ~]# grep adc 1.txt
  4. adc
  5. [root@localhost ~]# grep a.c 1.txt
  6. abc
  7. adc

*   匹配前导符0到多次

  1. [root@localhost ~]# cat 1.txt
  2. a
  3. ab
  4. abc
  5. abcd
  6. abcde
  7. abcdef
  8. ggg
  9. hhh
  10. iii
  11. [root@localhost ~]# grep "abc*" 1.txt
  12. ab
  13. abc
  14. abcd
  15. abcde
  16. abcdef
  17. [root@localhost ~]# grep "abcd*" 1.txt
  18. abc
  19. abcd
  20. abcde
  21. abcdef

.*   任意多个字符

  1. [root@localhost ~]# grep ".*" 1.txt
  2. a
  3. ab
  4. abc
  5. abcd
  6. abcde
  7. abcdef
  8. ggg
  9. hhh
  10. iii

[ ]   匹配指定范围内的一个字符

  1. [lL]ove
  2. [root@localhost ~]# cat 1.txt
  3. love
  4. Love
  5. 1ove
  6. iove
  7. [root@localhost ~]# grep [lL]ove 1.txt
  8. love
  9. Love

[ - ]   匹配指定范围内的一个字符,连续的范围

  1. [a-z0-9]ove //////[a-Z]=[a-zA-Z]
  2. [root@localhost ~]# cat 1.txt
  3. love
  4. Love
  5. 1ove
  6. iove
  7. [root@localhost ~]# grep [0-9] 1.txt
  8. 1ove
  9. [root@localhost ~]# grep [a-z]ove 1.txt
  10. love
  11. iove
  12. [root@localhost ~]# grep [a-Z]ove 1.txt
  13. love
  14. Love
  15. iove

[^]   匹配不在指定组内的字符

  1. [^a-z0-9]ove //////取反
  2. [root@localhost ~]# cat 1.txt
  3. love
  4. Love
  5. 1ove
  6. iove
  7. [root@localhost ~]# grep "[^a-z]ove" 1.txt
  8. Love
  9. 1ove
  10. [root@localhost ~]# grep "[^0-9]ove" 1.txt
  11. love
  12. Love
  13. iove

\   用来转义元字符    (''   ""    \),脱意符

  1. [root@localhost ~]# grep "l." 1.txt
  2. love
  3. l.ve
  4. [root@localhost ~]# grep "l\." 1.txt
  5. l.ve

\<   词首定位符

  1. [root@localhost ~]# grep "love" 1.txt
  2. love
  3. iloveyou
  4. [root@localhost ~]# grep "\<love" 1.txt
  5. love

^  和  \<的区别

  1. [root@localhost ~]# cat 1.txt
  2. i loveyou
  3. loveyou
  4. [root@localhost ~]# grep "\<love" 1.txt
  5. i loveyou
  6. loveyou
  7. [root@localhost ~]# grep "^love" 1.txt
  8. loveyou

\>   词尾定位符

  1. love\>

()   \(..\)   匹配稍后使用的字符的标签

  1. :3,9 s/\(.*\)/#\1/ 加注释

x\{m\}   字符x重复出现m次

  1. [root@localhost ~]# grep o 1.txt
  2. love
  3. loove
  4. looove
  5. [root@localhost ~]# grep "o\{3\}" 1.txt
  6. looove

x\{m,\}   字符x重复出现m次以上

  1. o\{5,\}

x\{m,n\}   字符x重复出现m到n次

  1. o\{5,10\}
  2. [root@localhost ~]# egrep "o{4,5}" 1.txt
  3. oooo
  4. ooooo
  5. ioooo
  6. ooooi
  7. iooooi
  8. [root@localhost ~]# egrep "o{5,5}" 1.txt
  9. ooooo

2.2、扩展正则表达式元字符

+   匹配1~n个前导字符

  1. [root@localhost ~]# cat 1.txt
  2. lve
  3. love
  4. loove
  5. [root@localhost ~]# egrep lo+ve 1.txt
  6. love
  7. loove

?   匹配0~1个前导字符

  1. [root@localhost ~]# egrep lo?ve tom.sh
  2. love
  3. lve

a|b   匹配a或b

  1. [root@localhost ~]# egrep "o|v" 1.txt
  2. lve
  3. 1ove
  4. loove
  5. looove
  6. loeve
  7. love
  8. Love
  9. iloveyou
  10. l.ve
  11. o
  12. oo
  13. ooo
  14. oooo
  15. ooooo
  16. ioooo
  17. ooooi
  18. iooooi

()   组字符

  1. [root@localhost ~]# egrep "loveable|rs" 1.txt
  2. rs
  3. loveable
  4. lovers
  5. [root@localhost ~]# egrep "love(able|rs)" 1.txt
  6. loveable
  7. lovers

Shell第四章《正则表达式》的更多相关文章

  1. Shell脚本学习指南 [ 第三、四章 ] 查找与替换、文本处理工具

    摘要:第三章讨论的是编写Shell脚本时经常用到的两个基本操作.第四章总共介绍了约30种处理文本文件的好用工具. 第三章 查找与替换 概括:本章讨论的是编写Shell脚本时经常用到的两个基本操作:文本 ...

  2. 第四章:更多的bash shell命令

    第四章:更多的bash shell命令 监测程序 ps (其他ps内容见#1 ) Unix风格的ps命令参数 参数 描述 -A 显示所有进程 -N 显示与指定参数不符的所有进程 -a 显示除控制进程( ...

  3. [转]Windows Shell 编程 第四章 【来源 http://blog.csdn.net/wangqiulin123456/article/details/7987933】

    第四章 文件的本质 以前,所有文件和目录都有一个确定的属性集:时间,日期,尺寸,以及表示‘只读的’,‘隐藏的,‘存档的’,或‘系统的’状态标志.然而,Windos95(及后来的WindowsNT4.0 ...

  4. [Python笔记][第四章Python正则表达式]

    2016/1/28学习内容 第四章 Python字符串与正则表达式之正则表达式 正则表达式是字符串处理的有力工具和技术,正则表达式使用预定义的特定模式去匹配一类具有共同特征的字符串,主要用于字符串处理 ...

  5. 《Linux命令行与shell脚本编程大全》 第十四章 学习笔记

    第十四章:呈现数据 理解输入与输出 标准文件描述符 文件描述符 缩写 描述 0 STDIN 标准输入 1 STDOUT 标准输出 2 STDERR 标准错误 1.STDIN 代表标准输入.对于终端界面 ...

  6. python全栈开发中级班全程笔记(第二模块、第四章(三、re 正则表达式))

    python全栈开发笔记第二模块   第四章 :常用模块(第三部分) 一.正则表达式的作用与方法 正则表达式是什么呢?一个问题带来正则表达式的重要性和作用      有一个需求 : 从文件中读取所有联 ...

  7. Linux Shell编程第3章——正则表达式

    目录 正则表达式基础 正则表达式的扩展 通配 grep命令 正则表达式基础 Linux Shell以字符串作为表达式向系统传达意思.元字符(Metacharacters)是用来阐述字符表达式意义的字符 ...

  8. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  9. apue第四章学习总结

    apue第四章学习总结 4.1.若以stat函数去替换lstat函数,会发生: 原来的目录路径: $:~/workspace/apue2/include$ ls -l apue.h abc lrwxr ...

随机推荐

  1. 《Java编程思想》学习笔记_多态

    多态 多态指一个行为产生多种状态,针对父类类型可接收其子类类型,最终执行的状态由具体子类确定,其不同子类可呈现出不同状态.例如人[父类]都会跑步[行为],但小孩[子类]跑步.成年人[子类]跑步.运动员 ...

  2. HashSet集合介绍和哈希值

    HashSet集合介绍 ~java.util.Set接口 extends Collection 接口~Set接口的特点: 1.不允许存储重复的元素 2.没有索引,没有带索引的方法,也不能使用普通的fo ...

  3. Python基于周立功ZCANPRO开发刷写脚本

    一.概述 1.背景 本文章主要是记录用Python基于周立功ZCANPRO开发VIN和SN码刷写工具. 2.环境搭建 Python3.8.10 32位(必须) 周立功上位机:ZCANPRO 周立功CA ...

  4. SpringMVC底层——请求参数处理流程描述

    在DispatcherServlet.java的doDispatch方法中,springmvc通过handlermapping里面找哪个handler能处理请求,handler封装了目标方法的信息, ...

  5. “杀死” App 上的疑难崩溃

    在移动应用性能方面,崩溃带来的影响是最为严重的,程序崩了可以打断用户正在进行的操作体验,造成关键业务中断.用户留存率下降.品牌口碑变差.生命周期价值下降等影响.很多公司将崩溃率作为优先级最高的技术指标 ...

  6. 3.Android高仿网易云音乐-首页复杂发现界面布局和功能/RecyclerView复杂布局

    0.效果图 效果图依次为发现界面顶部,包含首页轮播图,水平滚动的按钮,推荐歌单:然后是发现界面推荐单曲,点击单曲就是直接进入播放界面:最后是全局播放控制条上点击播放列表按钮显示的播放列表弹窗. 1.整 ...

  7. cordova 发送ajax请求的相关配置

    <access origin="*" /> <preference name="scheme" value="http" ...

  8. rust里的内存对齐

    内存对齐主要遵循下面三个原则: 结构体变量的起始地址能够被其最宽的成员大小整除 结构体每个成员相对于起始地址的偏移能够被其自身大小整除,如果不能则在前一个成员后面补充字节 结构体总体大小能够被最宽的成 ...

  9. python 日志类

    简介 在所有项目中必不可少的一定是日志记录系统,python为我们提供了一个比较方便的日志模块logging,通常,我们都会基于此模块编写一个日志记录类,方便将项目中的日志记录到文件中. loggin ...

  10. 转:windows下定时执行备份数据库

    上一篇写了linux下定时任务,这一篇转发一个windows下定时备份数据库. 第一种:新建批处理文件 backup.dat,里面输入以下 net stop mysql xcopy "C:\ ...