目录
shell:/bin/bash
正则表达式:匹配的是文章中的字符
通配符:用来处理文件名 ? 任意单个字符
元字符:不代表本来的含义,在正则表达式中有特殊含义的字符
正则表达式想用好:
自己写容易, 读取别人的正则
1.记忆元字符的含义
2.多用
正则表达式
1、代表字符
字符 | 含义 |
---|---|
. | 单个任意字符,可以是一个汉字 |
[] | 指定范围内的任意单个字符 |
\ | 转义字符,用于取消特殊符号的含义 |
[:alnum:] | 字母和数字 |
[:alpha:] | 代表任意英文大小写字符 |
[:lower:] | 小写字母 |
[:upper:] | 大写字母 |
[:blank:] | 空白字符(空格和制表符) |
[:space:] | 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广 |
[.] | 任何元字符放在在方括号里都代表他原来的意思,.在里面意思就是. |
[^] | 匹配指定范围外的任意单个字符,例如0-9匹配任意一位非0-9里的字符 |
2、表示次数
符号 | 含义 |
---|---|
* | 代表前面的字符出现0到+∞次 |
.* | 代表任意长度字符 |
\? | 0或1次 可以有也可以无 |
\ + | 一次到+∞次 |
\ {3 \ } | 前面的字符出现三次 |
\ {3,5 \ } | 前面的字符出现3到5次 |
\ {3, \ } | 前面的字符最少出现三次 |
\ {,5 \ } | 前面的字符最多出现5次 |
3、位置锚定
字符 | 含义 |
---|---|
^ | 代表开头的行 |
$ | 代表结尾的行 |
^PATTERN$ | 用于模式匹配整行 (单独一行 只有root) |
^$ | 空行 |
^[[:space:]]*$ | 空白行 |
\ < | 代表以什么字符为开头,等同于\b |
\ > | 代表以什么字符为结尾,等同于\b |
echo hello-123 |grep "\ <123"
echo hello_123 |grep "\ <123"
echo hello 123 |grep "\ <123"
除了 字母 数字 下划线其他都算 单词的分隔符
4、分组或其他
分组:用括号( )将需要组合的字符括起来,当作一个整体去处理,如(root)+
后向引用:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名
方式为:\1,\2,\3……分组
\1表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
或者
或者:\ |
扩展正则表达式元字符:(支持的工具:egrep、awk)
字符 | 含义 |
---|---|
+ | 匹配前面子表达式1次以上,例:go+d,将匹配至少一个o,good、gooood、gooooood都可以匹配到 |
? | 匹配前面子表达式0次或1次,例:go?d,将匹配gd或者god |
() | 将括号中的字符串看作是一个整体,例:g(oo)+d,将匹配oo整体一次以上,如good、goooood等 |
| | 以或的方式匹配字符串,例:g(oo|la)d,将匹配good或者glad |
实验题:
查找ip地址
筛选出ip地址的四个分段
[0-9]{1,3}\:三位数,每位是0-9的范围
表示qq号
echo "940132245" |grep "\b[0-9]{6,12}\b"
表示邮箱
echo "zhou@qq.com" |grep -E "[[:alnum:]]+@[[:alnum:]]+.[[:alnum:]_]+"
表示手机号
echo "13705173391"|grep -E "\b13456789{9}\b"