一、作用与介绍
- 正则表达式通常用于判断语句中,用来检查某一字符串是否满足某一格式
- 正则表达式是由普通字符与元字符组成
- 普通字符:包括大小写字母、数字、标点符号及一些其它符号
- 元字符:是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式
- Linux 中常用的有两种正则表达式引擎
- 基础正则表达式:BRE
- 扩展正则表达式:ERE
- 使用到正则表达式的Linux 工具
- grep
- sed
- awk
- egrep
二、基础正则表达式常见元字符
1、特殊字符
特殊字符 | 用法说明 | 举例说明 | 备注 |
\ | 转义符,对特殊字符进行转义,将特殊字符当作普通字符进行匹配 | a\.b 匹配上的字符为 a.b | |
\+ | 匹配其前面的字符出现最少1次,即:肯定有且>=1次 | ||
^ | 匹配指定字符开头的行 | ^tux 匹配以 tux 开头的行 | |
$ | 匹配已指定字符结尾的行 | tux$ 匹配以 tux 字符串结尾的行 | |
. | 匹配除换行符\r\n之外的任意单个字符 | ||
[] | 匹配列表中的一个字符 | a[0-9]b 能够匹配上axb字符串,其中x是0-9中的任意一个数字 | |
[^ ] | 匹配任意不在列表中的一个字符 | a[^0-9]b 能够匹配上axb字符串,其中x不是0-9中的任意一个数字 | |
* | 匹配前面子表达式0次或者多次 | goo*d 能够匹配上 good、goood、gooood 等 | |
\{n\} | 匹配前面的子表达式n次 | [O-9]\{2\} 匹配两位数字 | |
\{n,\} | 匹配前面的子表达式不少于n次 | [0-9]\{2,\} 匹配两位及两位以上数宁 | |
\{n,m\} | 匹配前面的子表达式n到m次 | [0-9]\{2,3\} 匹配两位到三位数字 |
注: egrep、awk使用{n}、{n, }、{n, m}匹配时“{}"前不用加"\”
2、定位符
特殊字符 | 用法说明 | 举例说明 | 备注 |
^ | 匹配输入字符串开始的位置 | ||
$ | 匹配输入字符串结尾的位置 |
3、非打印字符
特殊字符 | 用法说明 | 举例说明 | 备注 |
\n | 匹配一个换行符 | echo -e "hello\n" |
输出结果为: hello
|
\r | 匹配一个回车符 | ||
\t | 匹配一个制表符 | echo -e "hello\tworld" |
输出结果为: hello world |
三、扩展正则表达式
简化表达式,如:使用基础正则表达式查询除文件中空白行与行首为“#”之外的行(通常用于查看生效的配置文件),执行“grep -v‘^$’test.txt | grep -v‘^#’”即可实现。这里需要使用管道命令来搜索两次。如果使用扩展正则表达式, 可以简化为“egrep -v ‘^$|^#’ test.txt”,其中,单引号内的管道符号表示或者(or)。
1、可以使用扩展正则表达式的工具
- grep -E
- egrep
- awk -E
2、常见的扩展正则表达式的元字符
特殊字符 | 用法说明 | 举例说明 | 备注 |
+ | 重复一个或者一个以上的前一个字符 | egrep -n 'wo+d' test.txt 即可查询"wood" "woood" "woooooood"等字符串 | |
? | 零个或者一个的前一个字符 | egrep -n 'bes?t' test.txt 查询“bet”“best”这两个字符串 | |
| | 使用或者(or)的方式找出多个字符 | egrep -n 'of|is|on' test.txt 查询"of"或者"if"或者"on"字符串 | |
() | 查找“组”字符串,()构成一个子表达式 | egrep -n 't(a|e)st' test.txt 可查询"tast"或者"test"字符串 | “tast”与“test”因为这两个单词的“t”与“st”是重复的,所以将“a”与“e”列于“()”符号当中,并以“|”分隔,即可查询"tast"或者"test"字符串 |
()+ | 辨别多个重复的组 | egrep -n 'A(xyz)+C' test.txt 该命令是查询开头的"A"结尾是"C",中间有一个以上的"xyz"字符串的意思 | 可以匹配上 AxyzC 、AxyzxyzC、AxyzxyzxyzC 等字符串 |
标签:字符,匹配,正则表达式,test,Linux,字符串,egrep,十九 From: https://www.cnblogs.com/sandyflower/p/18474402