记录 shell学习过程(9)正则表达式 转自树明聊运维
正则表达式
- 正则表达式介绍
- 特殊字符
- POSIX特殊字符
一、正则表达式介绍
正则表达式是一种文本模式匹配,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。它是一种字符串匹配的模式,可以用来检查一个字符串是否含有某种子串、将匹配的子串替换或者从某个字符串中取出某个条件的子串。
正则表达式就像数学公式一样,我们可以通过正则表达式提供的一些特殊字符来生成一个匹配对应字符串的公式,用此来从海量数据中匹配出自己想要的数据。
正则表达式是一个三方产品,被常用计算机语言广泛使用,比如:shell、PHP、python、java、js等!
shell也支持正则表达式,但不是所有的命令都支持正则表达式,常见的的命令中只有grep、sed、awk命令支持正则表达式。
特殊说明
测试数据: #cat file
ac
ab
abbc
abcc
aabbcc
abbbc
abbbbbc
acc
abc
asb
aa
bb
a_c
aZc
aAAAAc
a c
ABC
ccc
dddd
http://www
abababab
c c d
123
a3c
e*f
二、特殊字符
定位符使用技巧:同时锚定开头和结尾,做精确匹配;单一锚定开头和结尾,做模糊匹配。
定位符 | 说明 |
---|---|
^ | 锚定开头 ^a 以a开头 默认锚定一个字符 |
$ | 锚定结尾 a$ 以a结尾 默认锚定一个字符 |
测试案例
1)精确匹配 以a开头c结尾的字符串
[root@www ~]# egrep "^ac$" file
ac
2)模糊匹配 以a开头
[root@www ~]# egrep "^a" file
ac
ab
abbc
abcc
aabbcc
abbbc
abbbbbc
acc
abc
asb
aa
a_c
aZc
aAAAAc
a c
abababab
a3c
3)模糊匹配 以c结尾的字符串
[root@www ~]# egrep "c$" file
ac
abbc
abcc
aabbcc
abbbc
abbbbbc
acc
abc
a_c
aZc
aAAAAc
a c
ccc
a3c
匹配符:匹配字符串
匹配符 | 说明 | |
---|---|---|
. | 匹配除回车以外的任意字符 | |
( ) | 字符串分组 | |
[ ] | 定义字符类,匹配括号中的一个字符 | |
[ ^ ] | 表示否定括号中出现字符类中的字符,取反。 | |
\ | 转义字符 | |
\ | 或 |
测试案例
1)精确匹配 以a开头c结尾 中间任意 长度为三个字节的字符串
[root@www ~]# egrep "^a.c$" file
acc
abc
a_c
aZc
a c
a3c
2)模糊匹配 以cc结尾的字符串 因为$只能锚定单个字符,如果是一个字符串就需要用()来做定义
[root@www ~]# egrep "(cc)$" file
abcc
aabbcc
acc
ccc
3)精确匹配 以a开头c结尾 中间是a-z,0-9 长度为三个字节的字符串
[root@www ~]# egrep "^a[a-z0-9]c$" file
acc
abc
a3c
4)精确匹配 以a开头c结尾 中间不包含a-z,0-9 长度为三个字节的字符串
[root@www ~]# egrep "^a[^a-z0-9]c$" file
a_c
aZc
a c
5)精确匹配 以e开头f结尾 中间是*号 长度为三个字节的字符串 e*f
[root@www ~]# egrep "^e\*f$" file
e*f
6)精确匹配 以a开头b或c结尾 中间是任意 长度为三个字节的字符串
[root@www ~]# egrep "^a.(b|c)$" file
acc
abc
asb
a_c
aZc
a c
a3c
限定符:对前面的字符或者字符串做限定说明
限定符 | 说明 |
---|---|
* | 某个字符之后加星号表示该字符不出现或出现多次 |
? | 与星号相似,但略有变化,表示该字符出现一次或不出现 |
+ | 与星号相似,表示其前面字符出现一次或多次,但必须出现一次 |
{n,m} | 某个字符之后出现,表示该字符最少n次,最多m次 |
{m} | 正好出现了m次 |
测试案例
1)精确匹配 以a开头 c结尾 中间是有b或者没有b 长度不限的字符串
[root@www ~]# egrep "^ab*c$" file
ac
abbc
abbbc
abbbbbc
abc
2)精确匹配 以a开头 c结尾 中间只出现一次b或者没有b的字符串
[root@www ~]# egrep "^ab?c$" file
ac
abc
3)精确匹配 以a开头 c结尾 中间是有b且至少出现一次 长度不限的字符串
[root@www ~]# egrep "^ab+c$" file
abbc
abbbc
abbbbbc
abc
4)精确匹配 以a开头 c结尾 中间是有b且至少出现两次最多出现四次 长度不限的字符串
[root@www ~]# egrep "^ab{2,4}c$" file
abbc
abbbc
5)精确匹配 以a开头 c结尾 中间是有b且正好出现三次的字符串
[root@www ~]# egrep "^ab{3}c$" file
abbbc
6) 精确匹配 以a开头 c结尾 中间是有b且至少出现一次的字符串
[root@www ~]# egrep "^ab{1,}c$" file
abbc
abbbc
abbbbbc
abc
三、POSIX特殊字符
特殊字符 | 说明 |
---|---|
[:alnum:] | 匹配任意字母字符0-9 a-z A-Z |
[:alpha:] | 匹配任意字母,大写或小写 |
[:digit:] | 数字 0-9 |
[:graph:] | 非空字符( 非空格控制字符) |
[:lower:] | 小写字符a-z |
[:upper:] | 大写字符A-Z |
[:cntrl:] | 控制字符 |
[:print:] | 非空字符( 包括空格) |
[:punct:] | 标点符号 |
[:blank:] | 空格和TAB字符 |
[:xdigit:] | 16 进制数字 |
[:space:] | 所有空白字符( 新行、空格、制表符) |
测试案例
注意[[ ]] 双中括号的意思: 第一个中括号是匹配符[] 匹配中括号中的任意一个字符,第二个[]是格式 如[:digit:]
1)精确匹配 以a开头c结尾 中间a-zA-Z0-9任意字符 长度为三个字节的字符串
[root@www ~]# egrep "^a[[:alnum:]]c$" file
acc
abc
aZc
a3c
2)精确匹配 以a开头c结尾 中间是a-zA-Z任意字符 长度为三个字节的字符串
[root@www ~]# egrep "^a[[:alpha:]]c$" file
acc
abc
aZc
3)精确匹配 以a开头c结尾 中间是0-9任意字符 长度为三个字节的字符串
[root@www ~]# egrep "^a[[:digit:]]c$" file
a3c
4)精确匹配 以a开头c结尾 中间是a-z任意字符 长度为三个字节的字符串
[root@www ~]# egrep "^a[[:lower:]]c$" file
acc
abc
4)精确匹配 以a开头c结尾 中间是A-Z任意字符 长度为三个字节的字符串
[root@www ~]# egrep "^a[[:upper:]]c$" file
aZc
5)精确匹配 以a开头c结尾 中间是非空任意字符 长度为三个字节的字符串
[root@www ~]# egrep "^a[[:print:]]c$" file
acc
abc
a_c
aZc
a c
a3c
6)精确匹配 以a开头c结尾 中间是符号字符 长度为三个字节的字符串
[root@www ~]# egrep "^a[[:punct:]]c$" file
a_c
7)精确匹配 以a开头c结尾 中间是空格或者TAB符字符 长度为三个字节的字符串
[root@www ~]# egrep "^a[[:blank:]]c$" file
a c
类似
[root@www ~]# egrep "^a[[:space:]]c$" file
a c
8)精确匹配 以a开头c结尾 中间是十六进制字符 长度为三个字节的字符串
[root@www ~]# egrep "^a[[:xdigit:]]c$" file
acc
abc
a3c
说明:特殊字符和POSIX字符是两套字符,都可以完成需要的匹配,大家学习的时候最少要记住一套字符并熟练应用。
案例一 匹配合法的IP地址
grep '^((25[0-5]|2[0-4][[:digit:]]|[01]?[[:digit:]][[:digit:]]?).){3}(25[0-5]|2[0-4][[:digit:]]|[01]?[[:digit:]][[:digit:]]?)$' --color ip_base
案例二 匹配座机电话号码
egrep "^[[:graph:]]{12}$" number |egrep "^(0[1-9][0-9][0-9]?)-[1-9][0-9]{6,7}$"
树明聊运维®
云计算、大数据、开发运维
Copyright © 树明聊运维 all right reserved, powered by skyFi
阿依吐拉(ayitula.com) 首个运维开源资源模块 2019-11-03 15:46:32
记录 shell学习过程(9)正则表达式 转自树明聊运维的更多相关文章
- 记录 shell学习过程(10 ) shell 对文件的操作
0.sed 常用内部命令 a 在匹配后面添加 i 在匹配前面添加 p 打印 d 删除 s 查找替换 c 更改 y 转换 N D P 下面用a来演示 1.sed 'a 追加内容' 文件 # sed 'a ...
- 记录 shell学习过程(7) case 以及 shell 的特殊变量
case 语法 read -p "num:" n case $n in ) echo haha ;; ) echo hehe ;; ) echo heiehi ;; *) echo ...
- 记录 shell学习过程(4)for 循环
1. for in ` #seq 生成从1到10 如果生成从10到1则写作 seq 10 -1 1 do echo $i done for in 也可以循环出字符串 for i in where is ...
- 记录 shell学习过程(11 ) shell 对输出流的处理
语法 awk [options] [BEGIN] {program} [END] [file] 常用命令选项 -F fs 指定描绘一行中数据字段的文件分隔符 默认为空格 -f file 指定读取程序 ...
- 记录 shell学习过程(8)函数
start () { echo "Apache start ...... [OK]" #return 0 可以写一个返回值,比如执行成功返回 0 } stop () { echo ...
- 记录 shell学习过程(6)while 以及 while的嵌套 以及 until
while中的5种条件 1.数学比较 read -p "Num :" num1 ] do echo 'greater' sleep done 2.字符串比较 read -p &qu ...
- 记录 shell学习过程(5)continue break
1.continue ;i<;i++)) do ];then continue fi echo $i done # ./continue.sh12346789 2.break ;i<;i+ ...
- 记录 shell学习过程(3) if 的格式
] #-e 为检测目录或文件是否存在 !为取反 then mkdir -v /tmp/ echo 'ok' fi if else if [ $USER == 'root' ] then echo 'h ...
- 记录 shell学习过程(2) read的用法
echo -n "login:"read username #read后面直接使用一个变量用于接收输入的数据 echo -n "password:"read ...
随机推荐
- bootstrap-table.js扩展分页工具栏,增加跳转到xx页
新项目,准备引用bootstrap-table这个控件来展示页面上的表格,无奈这款控件的分页工具栏没有跳转到xx页的功能,为了适应公司美工(只会出图的美工,却跟我要求这要求那)的蛋疼需求,硬着头皮改了 ...
- P1478 陶陶摘苹果(升级版)(sort(),时间优化,priority_queue)
题目描述 又是一年秋季时,陶陶家的苹果树结了 n 个果子.陶陶又跑去摘苹果,这次他有一个 a 公分的椅子.当他手够不着时,他会站到椅子上再试试. 这次与 NOIp2005 普及组第一题不同的是:陶陶之 ...
- JAVA类变量、类方法
类变量(static) 类变量是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量. public class C { ...
- Vue中echarts的使用
1.安装 npm install echarts --save 2. 导入并挂载 <template> <!-- 1. 为ECharts准备一个具备大小(宽高)的Dom --&g ...
- Redis入门-02-CentOS7环境搭建
CentOS7下redis安装过程,安装后需要开启端口号6379 #下载 wget http://download.redis.io/releases/redis-3.2.4.tar.gz #解压 t ...
- 【Debian学徒记事】Debian快速呼出Terminal终端
Debian快速呼出Terminal终端 书接上回,Debian已经安装完毕 失踪的Ctrl+Alt+T 安装完毕启动,我发现了剑很诡异的事,Ctrl+Alt+T居然失灵了 (在多次测试后发现,Deb ...
- mssql格式化工具——SQL PRETTY PRINTER
1.mssql版本 mssql格式化工具有4个版本 1.桌面版 2.mssql插件 3.vs插件 4.api 2.下载地址 下载地址:http://www.dpriver.com/dlaction.p ...
- [PAT] A1019 General Palindromic Number
[题目] https://pintia.cn/problem-sets/994805342720868352/problems/994805487143337984 题目大意:给定一个N和b,求N在b ...
- css代码实现switch开关滑动
效果预览: 代码如下: <style> #toggle-button{ display: none; } .button-label{ position: relative; displa ...
- z3学习档案
Reference: 看雪-z3巧解逆向 知乎:Z3一把梭 z3 solver学习 使用z3约束求解器解决CTF中的题目 Playing with Z3,hacking the serial chec ...