shell编程中十分重要的正则表达式(你若决定灿烂,山无遮,海无拦)

简介: shell编程中十分重要的正则表达式(你若决定灿烂,山无遮,海无拦)

前言


Linux命令中,可以使用通配符替代或者识别某一些文件名,通常用于模糊查询的场景


正则表达式与通配符类似,但是匹配的准确度比通配符更高


正则表达式组成:


· 普通字符:大小写字母、数字、标点符号及一些其他符号

· 元字符:在正在表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符或表达式)在目标对象中的出现模式


一、 基础正则表达式常见元字符


(支持的工具: grep、egrep、sed、 awk)


\

转义字符,用于取消特殊符号的含义,例: \!、\n、\$等

^

匹配字符串开始的位置

$

匹配字符串结束的位置,例: word$、^$匹配空行

.

匹配除\n之外的任意的一个字符,例: go.d、g..d

*

匹配前面子表达式0次或者多次,例: goo*d、 go.*d

[list]

匹配list列表中的一个字符,例: go[ola]d,[abc]、[a-z]、[a-z0-9]、[0-9]匹配任意一位数字

[^list]

匹配任意非list列表中的一个字符,取反,例:[^0-9]、[^A-Z0-9]、[^a-z]匹配任意一位非小写字母

\{n\}

匹配前面的子表达式n次,例: go\{2\}d、'[0-9]\{2\}'匹配两位数字

\{n,\}

匹配前面的子表达式不少于n次

\{n,m\}

匹配前面的子表达式n到m次


注: egrep、 awk使用{n}、{n,}、{n, m}匹配时"}"前不用加"\"


示例1:转义字符\

可以把特殊符号转换成普通符号字符;还可以把普通字符转换成特殊功能


\&

单个&代表后台运行

\|

单个|代表或

\!

单个!代表取反

\!

单个=代表复制或者字符判断

\$

单个$代表引用变量

\n

转换后是换行符

\t

转换后是制表符

\r

转换后是回车符

\w

匹配包括下划线的任何单词字符

\W(大写)

匹配任何非单词字符。等价于"[^A-Za-z0-9_]"

\d

匹配一个数字字符

\D

匹配一个非数字字符。等价于[^0-9]

\s

空白符(空格和制表符)

\S(大写)

非空白符


示例2:^开头


示例3:$结尾


示例4:点和星


grep匹配只要包括这个字符串的行就显示出来,将头尾限制后就不会匹配到多余字符的行了


示例5:复合使用


示例6:列表


示例7:\{n\}


示例8:\{n,m\}


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


(支持的工具: egrep、 awk、 grep-E、 sed -r)

+

匹配前面子表达式1次以上,例: go+d,将匹配至少一个o,如god、good、 goood等

匹配前面子表达式0次或者1次,例: go?d,将匹配gd或god

()

将括号中的字符串作为一个整体,例1: g(0o)+d,将匹配oo整体1次以上,如good、gooood等

|

以或的方式匹配字条串,例: g(oo|la)d,将匹配good或者glad


示例1:加号


示例2:问号


示例3:括号


示例4:习题

模拟匹配南京的电信号码


025 5xxxxx


025 8xxxxx


025-


025xxxxxxx


[root@localhost regular]# cat testfile1
02588888888  #符合
025-5555555555
025 12345678
025 54321678 #符合
025ABC88888
025-85432109  #符合
0251-85432109
0025-85432109


示例5:习题

匹配电子邮箱:


用户名@子域名.[二级域名],顶级域


zhangsan123@qq.com (符合)

li_si@163.com

wang@wu@sina.com

zhao liu@126.com

qianqi@sina.com.cn(符合)


要求:

1.用户名@:长度要求在6-18位,任意大小写英文,任意数字,除了@符号和空格以外的其它任意符号字符,开头只能是_或者字母

2.子域名.[二级域名]:长度任意,符号只能包含-_.

3.顶级域名:长度在2-5,任意大小写英文

4.完整匹配


长度要求在6-18位 {6,18}
任意大小写英文,任意数字  [A-Za-z0-9] 
除了@符号和空格以外的其它任意符号字符  [^@ ]
开头只能是_或者字母  ^[_A-Za-z]
长度任意,符号只能包含-_.  [A-Za-z_\-\.]+  或者[A-Za-z_\-\.]{1,}
长度在2-5,任意大小写英文  \.([A-Za-z]{2,5})$ 
^[_A-Za-z][^@ ]{5,17}@ [A-Za-z_\-\.]+ \.([A-Za-z]{2,5})$

总结


1.正则表达式的元字符有很多,我们只需要记一些常用的即可,对于不常用的我就在需要用的时候搜索一下

2.判断一个字符是正则表达式还是通配符,我们看用的是什么命令:例如“ls”,看的是文件名用的就是通配符;“grep”,看的是文件内容用的就是正则表达式

目录
相关文章
|
2月前
|
Unix Linux Shell
【Shell 编程指南 日期命令】Date命令:显示与设置系统时间和日期
【Shell 编程指南 日期命令】Date命令:显示与设置系统时间和日期
52 0
|
2月前
|
Shell C++ 开发者
【Shell 编程指南】Shell运算操作符之$[]详解
【Shell 编程指南】Shell运算操作符之$[]详解
18 0
|
3月前
|
Ubuntu Linux Shell
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
62 0
|
18天前
|
监控 Shell 开发工具
Shell编程
Shell编程
|
2月前
|
存储 Java Shell
bigdata-04-shell编程基础
bigdata-04-shell编程基础
21 0
|
2月前
|
Shell Linux C++
【Shell 编程设计】 编写自己的清理后台的Shell脚本
【Shell 编程设计】 编写自己的清理后台的Shell脚本
33 1
|
2月前
|
存储 Shell 数据安全/隐私保护
【Shell 编程指南】Shell read命令 (从标准输入读取数值)
【Shell 编程指南】Shell read命令 (从标准输入读取数值)
32 0
|
2月前
|
Shell C语言 C++
【Shell 编程指南】shell中的(),{}几种语法用法
【Shell 编程指南】shell中的(),{}几种语法用法
17 0
|
2月前
|
Shell 程序员 Linux
【Shell 编程指南】shell运算操作符之(())
【Shell 编程指南】shell运算操作符之(())
19 0
N..
|
2月前
|
JavaScript 前端开发 PHP
web编程的正则表达式
web编程的正则表达式
N..
10 1