shell中正则表达式的理解与使用
1. 什么是正则表达式
linux shell以一串字符作为表达式向系统传达意思,元字符是用来解释字符表达意义的字符。简单来说:元字符就是描述字符的字符,它用于对字符表达式的内容,转化以及各种操作信息进行描述,正则表达式是由一串字符和元字符构成的字符串,它的功能是文本查询和字符串操作,它可以匹配文本的一个字符或字符集合。
2. 为什么要学习正则表达式
在企业中,我们每天做的linux运维工作中,时刻都会面对大量带有字符串的文本配置、程序、命令输出及日志文件等,而我们经常会有迫切的需要从大量的字符串内容中查找符合工作需要的特定字符串,这就要靠正则表达式,因此,可以说正则表达式就是为过滤这样字符串的需求而生的。
3. 正则表达式数据处理过程
实际上正则表达式就是完成过滤工作,将不满足正则表达式定义的字符、数据拒绝掉。
正则表达式就像是一个漏斗。
4. 基本的正则表达式元字符集合及其意义
shell赋予了它们超越字面的含义
1)*符号
*
匹配前面一个普通字符的0次或多次重复
hel*o 可以用来表示: helo hello hellllllo
2).符号
.
匹配任意一个字符
...aa. 表示前三个字符可以为任意 第四个和四五个字符要为a 第六个字符可以为任意
注意:任意字符可以是一个空格
3)^符号
^
用于匹配行首, 表示行首的字符是^字符后面的那个字符
^hello 表示匹配以hello开头的行
^...roo* 表示行首的前三个字符为任意字符 第四到六的字符为roo 第七个字符开始可以重复匹配六
4)$符号
$
匹配行尾 ,$
放在匹配字符之后
hello$ 表示匹配以hello结尾的行
空行的表示:^$ 简单理解就是一开始就结束的行
5)[ ]符号
[ ]
匹配字符集合
支持穷举方法列出字符集合的所有元素
也支持使用 “-” 符号表示字符集合范围,表明字符集合范围从 “-” 左边字符开始,到 “-” 右边字符结束
[0123456789] [0-9] 匹配任何一个数字
匹配字母:[a-z] [A-Z] [c-q]
匹配任意英文单词:[A-Za-z][A-Za-z]*
注意:^符号在[]内使用时,就不表示匹配行首,而表示取反
例如:[^c-q] 匹配在c-q范围外的字符
6)\符号
\
转义符号,用于屏蔽一个元字符的特殊意义
\. 经过转义后 . 不再表示一个元字符,而成为一个普通字符
7)\<\>符号
\<\>
精确匹配符号,该符号利用 \ 屏蔽 <> 符号
\<the\> 精确匹配the 而不匹配包含the的单词 比如there、them、another等
8)\{\}符号符号
\{\}
系列符号与*符号用法类似,都表示前一个字符的重复,但此符号可以指定重复次数。
包括三种形式:
\{n\}
匹配前面字符出现n次\{n,\}
匹配前面字符出现至少n次\{n,m\}
匹配前面字符出现n~m次
NI\{3\}C 表示: NIIIIC #重复字符I 三次
NI\{3,\}C #重复字符I 至少三次
NI\{3,6\}C #重复字符I 三到六次
[a-z]\{5\} #精确匹配5个小写字母