文章目录
- 1 + 加号 匹配前一个字符1次或多次
- 2 | 管道 表示用或的方式找出数个字符串
- 3 [] 与 |
- 4 ()小括号 被括起来的内容表示一个整体
- 5 {} 连续出现 o{n,m} 前一个字母o,至少连续出现n次,最多连续出现m次
- 6 ? 问号 匹配前一个字符0次或1次
- 常见搭配
- 正则习题
字符 | 作用 |
+ 加号 | 匹配前一个字符1次或多次 |
? 问号 | 匹配前一个字符0次或1次 |
管道 | 表示用或的方式找出数个字符串 |
() 括号 | 分组过滤被括起来的东西表示一个整体 |
\n | 引用前面()的内容 n为数字 |
[: /]+ | 匹配括号内的:或/字符1次或多次 |
a{n,m} | 匹配前一个字符最少n次,最多m次 |
a{n,} | 匹配前一个字符最少n次 |
a{n} | 匹配前一个字符正好n次 |
a{,m} | 匹配前一个字符最多m次 |
1 + 加号 匹配前一个字符1次或多次
grep命令默认只支持基础正则,我们一般用egrep
和grep -E
使用扩展正则
用组合符号匹配连续出现的数字
如果说我们不想要文件中其他的字符,只想要能匹配上的,加-o
参数显示匹配过程即可
2 | 管道 表示用或的方式找出数个字符串
3 [] 与 |
符号 | 含义 | 应用场景 |
[] | 1次匹配一个字符[oldboy] | 匹配单个字符[]和+ |
| | 匹配1个字符或多个字符 a|b|c oldboy|oldgirl | 匹配字符串时 |
4 ()小括号 被括起来的内容表示一个整体
我们现在想匹配oldboy
或者oldbey
,用如下方式试试:
不行,该指令匹配的是oldbo
或者ey
这俩字符串。以下几种方式都能实现匹配oldboy
或者oldbey
:
5 {} 连续出现 o{n,m} 前一个字母o,至少连续出现n次,最多连续出现m次
字符 | 作用 |
a{n,m} | 匹配前一个字符最少n次,最多m次 |
a{n,} | 匹配前一个字符最少n次(相当于逗号后是无穷大) |
a{n} | 匹配前一个字符正好n次 |
a{,m} | 匹配前一个字符最多m次,等价于a{0,m} |
6 ? 问号 匹配前一个字符0次或1次
常见搭配
^$
:匹配空行
[abc]+
:匹配方括号内字符的任何排列形式
.*
:匹配空行
正则习题
1)过滤出id.txt中符合要求的身份证号
要求:17位数字,最后一位是数字或者大写X
2)删除注释行以及空行
这需要用到grep的-v
参数,反向查找,查找不满足正则的行