正则不怎么会用

一、基本正则
1."."(一个点)
匹配除换行符之外的任意一个字符,例如r.t能匹配rat、ret,但是不能匹配root

2."*"符号
用于匹配前一个字符0次或任意多次,比如ab*,可以a、ab、abb等。比如".*"代表任意长度的不包含换行的字符
grep 'r*t' /etc/passwd --->没有rt、rrt、rrrt,只能匹配到t
grep 'r.*t' /etc/passwd --->查找包含字母r,后面紧跟任意长度的字符,再跟一个字母t的行

3."{n,m}"
匹配前面的字符n到m次
grep 'ro{0,2}t' /etc/passwd

匹配前面的字符n次,下例匹配的是包含root的行
grep 'ro{2}t' /etc/passwd

匹配前面的字符至少出现n次(包含n次)
grep 'ro{0,}t' /etc/passwd

4."^"
匹配开头的字符,比如,'^ll'匹配的是以字母root开始的行
grep '^root' /etc/passwd

5."$"
匹配结尾的字符,"abc$"代表以abc结尾的行
grep 'abc$' /etc/passwd

匹配空行"^$"

6.[]
匹配方括号内出现的任一字符。比如单项选择题的答案可能是A、B、C、D,用正则表达就是[ABCD]
匹配所有的大写字母[A-Z]
匹配所有的字母[A-Za-z],"-"做范围限定
匹配非字母的字符[^A-Za-z],"^"是取反的意思
匹配手机号"^1[38][0-9]{9}"

7.
""是转义符
匹配一个坐机号码:0720-66666666或者0720-66666666
单纯用[-]匹配是不行的,因为这里的"-"是有特殊意义的,需要""转义一下,写法应该是[\-]

8."<"和">"
这两个符号分别用于界定左边界和右边界
,比如说"<hello"用以匹配以"hello"开头的单词,而"hello>"用于匹配以hello结尾的单词
<hello>就可以精确匹配到hello这个单词

9."d"
d匹配一个数字,等价于[0-9],不过d在配合grep使用时需要加选项-P,因为d是一种perl兼容模式的表达式
[root@localhost ~]# echo 123 | grep -P 'd'
123
[root@localhost ~]# echo 123 | grep '[0-9]'
123

10.""
匹配单词的边界,比如"hello"可精确匹配"hello"单词
[root@localhost ~]# echo "hello world" | grep "hello"
hello


11."B"
匹配非单词的边界,比如helloB可以匹配"helloworld"中的"hello"
[root@localhost ~]# echo "helloworld" | grep "helloB"
helloworld

12."w"
匹配字母、数字和下划线,等价于[A-Za-z0-9]

13."W"
匹配非字母、非数字、非下划线、等价于[^A-Za-z0-9]

14."s"
匹配任何空白字符

15."S"
匹配任何非空白字符

二、扩展正则
使用扩展正则需要使用egrep命令

1."?"
匹配前面的一个字符0次或1次

2."+"
匹配前一个字符1次以上

3."|"
是"或"的意思

4."()"
该符号经常与"|"符号联合使用,用于枚举一些列可替换的字符。
比如要匹配"hood"、"hard"、"hold"
h(ar|oo|ol)d

三、通配符
"{}"
拥有匹配所有括号内包含的以逗号隔开的字符
第一种方式:ls {A,B,C,D}.doc
第二种方式:ls [A-C].doc

列出以字母AB或者CD开头,以.doc结尾的文件,就只能用"{}"

"!"
[!A]代表非A

原文地址:https://www.cnblogs.com/liangjiongyao/p/9294264.html