正则不怎么会用
一、基本正则
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."\b"
匹配单词的边界,比如"\bhello\b"可精确匹配"hello"单词
[root@localhost ~]# echo "hello world" | grep "\bhello\b"
hello
11."\B"
匹配非单词的边界,比如hello\B可以匹配"helloworld"中的"hello"
[root@localhost ~]# echo "helloworld" | grep "hello\B"
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