正则表达式
1.正则表达式单字符
单字符种类 | 描述 | 例子 |
---|---|---|
特定字符 | 某个具体的字符 | ‘1’,a |
范围内字符 | 单个字符[] | 数字字符:[0-9],[259] 小写字符:[a-z] 反向字符: [ ^0-9 ] |
任意字符 | 代表任何一个字符 | '.' |
[root@localhost tmp]# grep '1' passwd.bak #查找有'1' 的行
[root@localhost tmp]# grep '[A-Z]' passwd.bak #查找所有的大写字母
[root@localhost tmp]# grep '[a-zA-Z]' passwd.bak #查找所有的字母
[root@localhost tmp]# grep '[,:_/]' passwd.bak #查找特殊字符
[root@localhost tmp]# grep '[^0-9]' passwd.bak #查找不包括数字的行
[root@localhost tmp]# grep '.' passwd.bak #查找.这个字符,转义了
2:其它字符的表示
边界字符:头尾字符:
^ : ^root ------以root开头
$:false$ ------以false结尾
^$: 代表空行
[root@localhost tmp]# grep '^root' passwd.bak
[root@localhost tmp]# grep 'false$' passwd.bak
3:正则表达式的其它字符
*元字符:代表普通字符或者其它字符
元字符 | 描述 |
---|---|
w 小写 | 匹配任何字类字符,包括下划线([A-Z a-z0-9]) |
W 大写 | 匹配任何非字类字符,包括下划线([ ^A-Z a-z0-9]) |
代表单词的分隔 |
[root@localhost tmp]# grep 'x' passwd.bak #会匹配x【密码】字段和单词中的x
[root@localhost tmp]# grep 'x' passwd.bak #把x当成一个单词,不会匹配单词中的x
4:正则表达式的字符组合
类型 | 表述 | 例子 |
---|---|---|
字符串 | 'root','1000','m..c','[ A-Z] [ a-z] ' ' [ 0-9 ] [ 0-9 ] ' |
[root@localhost tmp]# grep '1000' passwd.bak
oracle:x:1000:1000:oracle:/home/oracle:/bin/bash
[root@localhost tmp]# grep '[A-Z][a-z]' passwd.bak #匹配一个大写紧挨着一个小写---共2位字符
[root@localhost tmp]# grep '[0-9][0-9]' passwd.bak #匹配紧挨着的2位数字---共2位并且贪婪匹配
5:重复
?:0次或者1次匹配前面的字符或者子表达式
+:1次或多次匹配前面的字符或者子表达式
*:0次或多次匹配前面的字符或者子表达式
[root@localhost tmp]# grep '(mail)?' passwd.bak #注意?,+ 才是匹配重复
{n,m}:重复特定次数
?:{0,1}
+:{1,}
*:{0,}
[root@localhost tmp]# grep '[0-9]{2,3}' passwd.bak #:重复2到3次,除了()之外,其它都要转义{}
6:任意字符串
.* :代表任意字符串 eg: ^.* m.*c --------代表m开头c结尾,任意长度
m..c-----代表m开头c结尾,但只有4位长度
7:逻辑的表示
|:‘/bin(false|true)’
常见匹配模式: