前言
定义
REGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符。 正则表达式被很多程序和开发语言所广泛支持:vim, less,grep,sed,awk, nginx,mysql 等
作用范围:主要是匹配字符串(命令结果或者文本内容) shell中可以使用 man 7 regex 查看使用详细信息
分类:
基本正则表达式
扩展表达式正则
区别:基础正则表达式 需要 \
日常使用建议加" " 双引号
grep -E 调用扩展正则
常见的元字符
!!#00ff00 支持的工具:grep、egrep、sed、awk!! | 字符 |说明 | | ------ | ------ | | \ |转义符 取消特殊符号含义 如\ ! 表示 ! 字符 |
[root@sv1 ~]# cat 1111 | grep "\!"
!
[root@sv1 ~]# cat 1111 | grep !
!
| .| 任意单个字符 包括汉字 | | ------ | ------ |
[root@sv1 ~]# echo "1a bc ef 你好"|grep "."
1a bc ef 你好
| [ ]| 匹配范围内任意单个字符 | | ------ | ------ | | [0-9] | 数字 | | [^0-9] | 排除数字 | |[^wan]| 排除wan | [a-zA-Z] | 字母 包含大小写等同[:alpha:] | |[:alnum:]|字母和数字 |[:blank:]|空白字符 制表符 |[:space:]| 包括空格、制表符 (水平和垂直)、换行符、回车符等各种类型的空白
[root@sv1 ~]# echo "acv234"|grep "[0-9]"
acv**234**
| \s| 匹配任何空白字符,包括空格、制表符、换页符等等 \S 是非空白 | | ------ | ------ |
表示次数
| 字符 |说明 | | ------ | ------ | |* |匹配前面的字符任意次,包括0次| | .* | 任意长度字符 不包括0次 | | ? | 前面字符出现0或者一次 | | + |匹配其前面的字符出现最少1次 大于等于1 | | \ {n\ } | 匹配前面的字符n次如:[0-9]{2}匹配两位数字 | | \ {m,n\ } | 匹配前面的字符至少m次,至多n次如:[0-9]{2,3}匹配2-3位数字| | \ {,n\ } | 匹配前面字符 最多n次 如:[0-9]{,2} 2位及以上数字| | \ {n,\ } | 匹配前面的字符至少n次 | 注: egrep、 awk使用{n}、{n,}、{n, m}匹配时 "{ }" 前不用加" \ "
位置锚点
| 字符 |说明 | | ------ | ------ | |^|匹配开头| |$| 匹配结尾 |^$|匹配空行 |\<PATTERN> | 匹配整个单词
分组和其他
分组:( ) 将多个字符捆绑在一起,当作一个整体处理,如:(root)+ 后向引用:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名 方式为: \1, \2, \3, … 分组 \1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
实例:
!!#ffff00 |!! :或 的方式匹配字符
综合应用举例子
1.!!#ffff00 + !! 匹配1及以上次数 2.!!#ffff00 ?!! 匹配前面0或者1次
3.字符{n} 前面字符匹配n次 4.匹配手机号
[root@sv1 ~]# echo "16255453367" |grep -E "\b1[2-9][0-9]{9}$"
16255453367
grep结合使用
!!#ffff00 grep -m n!!(数字) 多次匹配只取前!!#ffff00 n!!个 显示
!!#ffff00 grep -A 数字!! 匹配到的行后!!#ffff00 数字!!行显示出来 !!#ffff00 -B 数字!!, 前数字行 !!#ffff00 -C 数字!!, 前后各数字行 !!#ffff00 grep -e!!
当前主机连接状态:
[root@sv1 ~]# ss -nat | grep -v '^State' |cut -d" " -f1|sort |uniq -c
1 ESTAB
13 LISTEN