文章目录
一、什么是正则表达式
正则表达式(Regular Expression)是用于匹配字符串模式的工具。它可以高效地实现字符串的搜索、替换、验证等操作
二、第一类正则
- 元字符:指那些在正则表达式中具有特殊意义的专用字符,如:点(.)星(*)问号(?)等。
- 前导字符:即位于元字符前面的字符 ab
c
*或aooo
.
1、. 任意单个字符,除了换行符
[root@localhost ~]# grep "go." 1.txt
gole
goole
gooooole
gooooooooole
2、* 前导字符出现0次或多次,ab*能匹配“a”、“ab”以及“abb”,但是不能匹配“cb”
[root@localhost ~]# grep "go*" 1.txt #匹配前导字符0次或多次,即匹配到前导字符“o”出现0次或多次,结果如下
ggle
gole
goole
gooooole
gooooooooole
3、.* 任意长度的字符,ab.*
[root@localhost ~]# grep "goo.*" 1.txt #匹配goo之后的任意长度
goole
gooooole
gooooooooole
4、^ 行的开头
[root@localhost ~]# grep "^goo*" 1.txt #匹配以goo开头并且前导字符o出现0次或者多次
gole
goole
gooooole
gooooooooole
5、$ 行的结尾
[root@localhost ~]# grep ".*com$" 1.txt #匹配以com结尾,并且前面任意字符
.com
baidu.com
6、^$ 空行
[root@localhost ~]# grep "^$" 1.txt #匹配空行
7、[] 匹配指定字符组内的任一单个字符,[abc]
8、[^] 匹配不在指定字符组内的任一单个字符,[^abc]
9、^[] 匹配指定字符组内的任一字符开头,^[abc]
10、^[^] 匹配不以指定字符组内的任一字符开头,^[^abc]
11、\< 取单词的头
12、\> 取单词的尾
13、\<\> 精确匹配符号
14、\{n\} 匹配前导字符连续出现n次
15、\{n,\} 匹配前导字符至少出现n次
16、\{n,m\}匹配前导字符出现n次与m次之间
17、\(\) 保存被匹配的字符
例子:末行模式下修改:%s/192.\(168.1.254\)/172.\1/g #将192修改为172
- perl内置正则:
1、\d 匹配数字[0-9]
[root@localhost ~]# grep -P '\d' test.txt
2、\w 匹配字母数字下划线[a-zA-Z0-9_]
[root@localhost ~]# grep -P '\w' test.txt
3、\s 匹配空格、制表符、换页符[\t\r\n]
[root@localhost ~]# grep -P '\s' test.txt
- 扩展正则表达式元字符grep -E或egrep
1、+ 匹配一个或多个前导字符,如:bo+ 匹配结果boo或bo
2、? 匹配0个或1个前导字符,如:bo? 匹配结果b或bo
3、a|b 匹配a或b
4、() 组字符,如:(my|your)self
5、{n} 前导字符重复n次
6、{n,} 前导字符重复最少n次
7、{n,m} 前导字符重复n到m次
- 匹配ip地址
[root@localhost ~]# grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' 1.txt
192.168.1.254
172.31.0.1
三、第二类正则
字符写法 等价写法 含义
[:digit:] [0-9] 或 \d 任意数字字符(0-9)
[:alpha:] [a-zA-Z] 任意字母(大小写)
[:alnum:] [a-zA-Z0-9] 任意字母或数字
[:lower:] [a-z] 任意小写字母
[:upper:] [A-Z] 任意大写字母
[:punct:] 任意标点符号(如 .,!?- 等)
[:space:] [ \t\r\n\f\v] 或 \s 任意空白字符(空格、制表符、换行等)
[:print:] 任意可打印字符(包括空格)
[:graph:] 任意可打印字符(不包括空格)