正则表达式

简介: 正则表达式

正则表达式

一、正则表达式的元字符

image.png

image.png

[root@localhost ~]#ls /etc/ | grep rc[.0-6]  
grep命令使用正则表达式rc[.0-6]来匹配文件名中包含rc加数字(0-6)的文件或目录名,
其中方括号[]表示字符集,[.0-6]表示匹配.和0-6这些字符中的任意一个。
#此处的点代表字符
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
rc.d
rc.local
[root@localhost ~]# ls /etc/ | grep 'rc\.' #只匹配已rc.开头的文件
#\为转义符,此处的.只表示.,不表示任意字符
rc.d
rc.local
[root@localhost ~]# ls /opt | grep "t."  #过滤出仅包含字母"t"后跟任何其他字符的行。
[root@localhost ~]# grep 'r..t' /etc/passwd         
#r..t ..代表任意两个字符    
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@localhost ~]# echo abc |grep a.c              
#表示原来的点需要加\转义
abc
[root@localhost ~]# echo abc |grep a\.c
#使用grep正则表达式时不加引号有时匹配会有出入
abc
[root@localhost ~]# echo abc |grep 'a\.c'          
#标准格式需要加'' 或者""
[root@localhost ~]# ls |grep '[fhtx].txt'    
#匹配[]中任意一个字符
f.txt
h.txt
t.txt
x.txt
[root@localhost ~]# ls [a-d].txt                
#通配符
a.txt  A.txt  b.txt  B.txt  c.txt  C.txt  d.txt
[root@localhost ~]# ls | grep '[a-d].txt'             
#真正的小写在正则表达式中
a.txt
b.txt
c.txt
d.txt
[root@localhost ~]# ls |grep '[^a-z].txt'   
#显示非小写字母
A.txt
B.txt
[root@localhost ~]# ls |grep '[^a.z].txt'     
#“[^a.z]”表示不匹配字母“a”或“z”的任何字符(取反)
space空格
[root@localhost ~]# grep [[:space:]] 123.txt 
hhh  
jj    l
kkk 
[a-zA-Z] #表示同时匹配大小写

二、表示次数

image.png

2.1 *: 匹配前面的字符任意次,包括0次

[root@localhost ~]# echo  ac |grep 'ab*c'  #ab之间不输入b可匹配
ac
[root@localhost ~]# echo  abc |grep 'ab*c' #ab之间输入1个b可匹配
abc
[root@localhost ~]# echo  abbc |grep 'ab*c'#ab之间输入2个b可匹配
abbc

2.2 .* : 任意长度的任意字符,不包括0次,也就是匹配所有

[root@localhost ~]# echo ac |grep 'ab.*c'  #ac之间不输入b匹配不到
[root@localhost ~]# echo abc |grep 'ab.*c' #ac之间输入1个b可以匹配
abc
[root@localhost ~]# echo abbc |grep 'ab.*c' #ac直接输入2个b可以匹配
abbc

2.3 ?: 匹配其前面的字符出现0次或1次,即:可有可无

[root@localhost ~]# echo ac | grep 'ab\?c'    #ac之间不输入b可以匹配
ac
[root@localhost ~]# echo abc | grep 'ab\?c'   #ac之间输入1个b可以匹配
abc
[root@localhost ~]# echo abbc | grep 'ab\?c'  #ac之间输入2个b匹配不到 

2.4 \+ #匹配其前面的字符出现最少1次,即:肯定有且 >=1 次

[root@localhost ~]# echo ac | grep 'ab\+c'  #ac之间不输入b匹配不到
[root@localhost ~]# echo abc | grep 'ab\+c' #ac之间输入1个b可以匹配
abc
[root@localhost ~]# echo abbbbc | grep 'ab\+c' #ac之间输入多个b可以匹配
abbbbc

2.5 \{n} #匹配前面的字符=n次

[root@localhost ~]# echo abbbc |grep 'ab\{3\}c'  #输出abbbc匹配ac之间b字符出现3次可以匹配
abbbc
[root@localhost ~]# echo abbbbc |grep 'ab\{3\}c' #输出abbbbc匹配ac之间b字符出现3次匹配不到

2.6 \{m,n\} #匹配前面的字符至少m次,至多n次

[root@localhost ~]# echo abc |grep 'ab\{1,3\}c'  #输出abc匹配ac之间b出现最少1次最多3次可以匹配
abc
[root@localhost ~]# echo abbc |grep 'ab\{1,3\}c' #输出abbc匹配ac之间b出现最少1次最多3次可以匹配
abbc
[root@localhost ~]# echo abbbc |grep 'ab\{1,3\}c'#输出abbbc匹配ac之间b出现最少1次最多3次可以匹配
abbbc
[root@localhost ~]# echo abbbbc |grep 'ab\{1,3\}c'#输出abbbbc匹配ac之间b出现最少1次最多3次匹配不到

2.7 \{,n\} #匹配前面的字符至多n次,<=n

2.8 \{n,\} #匹配前面的字符至少n次

三、位置锚定

image.png

[root@localhost ~]# cat a.txt                #查看a.txt内容 
root
abc   abd  abf abe 
asfase
asdfasfewe
[root@localhost ~]# cat a.txt |grep '^a'     #查看a.txt内容过滤以a开头的行
abc   abd  abf abe 
asfase
asdfasfewe
[root@localhost ~]# cat a.txt |grep 'e$'     #查看a.txt内容过滤以e为结尾的行
asfase
asdfasfewe
[root@localhost ~]# cat a.txt |grep '^root$' #查看a.txt内容过滤只有root字符的行
root
[root@localhost ~]# cat a.txt |grep '\ba'    #查看a.txt过滤以a开头的词
abc   abd  abf abe 
asfase
asdfasfewe
[root@localhost ~]# cat a.txt |grep 'e\b'    #查看a.txt过滤以e为结尾的词
abc   abd  abf abe 
asfase
asdfasfewe
[root@localhost ~]# cat a.txt |grep -o '\babc\b' #查看a.txt过滤次abc
abc 

四、分组

()将多个字符捆绑在一起当做一个整体处理

[root@localhost ~]# echo abcccc |grep "abc\{4\}"  #匹配输出内容c出现4次
abcccc
[root@localhost ~]# echo abcccc |grep "\(abc\)\{4\}" #abc字符加()分组匹配输出内容abc出现4次,无abc出现4次匹配不到
[root@localhost ~]# echo abcabcabcabc |grep "\(abc\)\{4\}"  #abc字符加()分组匹配输出内容abc出现4次匹配成功
abcabcabcabc

五、扩展正则表达式

grep -E   或 sed -r    或 egrep

image.png

将test.txt中的内容用扩展正则表达式输出
[root@localhost ~]# cat test.txt
987-123-4567
987 456-1230
(123) 456-7890
[root@localhost ~]# cat test.txt | grep -E "(\([0-9]+\)|[0-9]+)[ -]?[0-9]+[ -]?[0-9]+"
目录
相关文章
|
5月前
|
自然语言处理
正则表达式1
正则表达式
|
数据库
几种常用的正则表达式
几种常用的正则表达式
102 0
正则表达式
正则表达式
85 0
|
移动开发 JavaScript 前端开发
正则表达式总结
什么是正则表达式? 正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象。
101 1
|
移动开发 Unix Linux
|
机器学习/深度学习 C++ Windows
|
Windows
正则表达式汇总
常用正则表达式
189 0