为了更好的处理文本的一种表达式,其匹配方式分为“文本字符”匹配和“元字符”匹配
正则表达式,相对于通配符而言,是一种精确匹配
元字符
- 正则表达式可分为基本正则表达式(BRE)和扩展正则表达式(ERE)
- 基本正则表达式(regexp)的元字符比扩展正则表达式的元字符少
- 基本正则表达式的元字符包括
.(点字符) ^(开头) $(结尾) [](匹配其中任意一项) - (连字符)*(限定符,0次或多次)
- 扩展表达式元字符,包含所有的基本表达式元字符,并包含下述元字符
|(或) ?(限定符,0次或1次) +(限定符,一次或多次) {}(限定符,指定范围的次数) ()(就是在元字符中起括号的作用)
- 扩展元字符要在基本元字符中使用,需要转移
\
- 使用扩展正则表达式(regex),若是grep,需要加参数
-E
元字符 | 意义 |
---|---|
. | 匹配除“\r\n”之外的任何单个字符 |
^ | 行的开头 |
$ | 行的结尾 |
[] | 匹配其中任意一个字符 |
() | 在和元字符组合时,起括号正常的意思。在基本正则表达式中使用是需要转义的 |
- | 在[]中表示连字符 |
\ | 转义 |
| | 或 |
? | 限定符,匹配0次或1次 |
* | 限定符,匹配0次或多次 |
+ | 限定符,匹配1次或多次 |
{} | 限定符,匹配指定范围的次数 |
\d | 数字字符,等价于[0-9] |
\w | 大小写字母,下划线和数字,等价于 [a-zA-Z0-9_] |
元字符-[]
- 特殊字符在这里将失去其特殊意义
- ^在第一位,表示否定
- -在[]表示连字符
元字符-{} - {m} 前面出现的内容匹配m次
- {m,n} 前面的内容匹配m到n次
- {m,} 前面出现的内容出现次数大于m次
- {,n} 前面的内容出现次数小于n次
# 匹配小写字母开头,且结尾是.txt,中间包含0个或多个字母
# 通过例子可看到+元字符在普通正则表达式中是需要转义的
# ^ 表示开头
# $ 表示结尾
# [[:lower:]] 所有的小写字母
# [a-z] 同样表示所有的小写字母,但是仅在ASCII中失效,对于美国字典排序不生效
# . 在正则表达式中需要转义
[dps@ccod131 bak]$ ls | grep '^[[:lower:]][a-z]\+\.txt$'
aa.txt
awk.txt
bb.txt
err.txt
file.txt
# 和上面的例子一样,但是元字符(+)在扩展正则表达式中是不需要转义的
# 参数-E表示扩展正则表达式
[dps@ccod131 bak]$ ls | grep -E '^[[:lower:]][a-z]+\.txt$'
aa.txt
awk.txt
bb.txt
err.txt
file.txt
# {}表示限定次数
[dps@ccod131 bak]$ ls | grep -E '^[[:lower:]][a-z]{2}\.txt$'
awk.txt
err.txt
# 这里匹配一个文件名包含(一个或多个a)或(一个或多个b),且以.txt结尾
[dps@ccod131 bak]$ ls | grep '^[ab]\+\.txt'
aa.txt
bb.txt
# ^ 在{}中表示否定,这里匹配一个文件名不是由(一个或多个a)或(一个或多个b)组成,但以.txt结尾的文件
[dps@ccod131 bak]$ ls | grep '[^ab]\+\.txt'
awk.txt
err.txt
file.txt
test11.txt
test_eof.txt
参考链接:https://github.com/CyC2018/CS-Notes/blob/master/notes/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F.md
https://github.com/CyC2018/CS-Notes/blob/master/notes/Linux.md
https://github.com/CyC2018/CS-Notes