本文为该视频(三剑客正则)的笔记分享。
基本用法
正则表达式regular expression(RE)(匹配有规律的东西):
基础正则(Basic RE (BRE) ):^ $ ^$ . * [a-z] [^abc]
扩展正则(Extended RE (ERE)):+ | (){} ?
正则:使用一些符号表达重复出现,大小写,开头/结尾含义
应用:三剑客(grep,awk, sed)、开发语言(python,golang, ...)
使用:过滤有规律的内容
| 基础正则 | 含义 |
|---|---|
| ^ | 以...开头的行 ^he |
| $ | 以...结尾的行 he$ |
| ^$ | 空行 |
| . | 任意一个字符 |
| * | 前一个字符连续出现(重复)0次或0次以上 |
| .* | 所有内容 |
| \ | 转义字符 ab键 |
| [] | 一个整体,匹配任意一个字符[abc] a或b或c |
| [^] | 取反排除, [abc] |
| 正则贪婪性 | 熟悉特点即可,.*或连续出现 |
| 扩展正则 | 含义 | 搭配 |
|---|---|---|
| + | 前一个字符连续出现1次或1次以上 | []+ |
| | | 或者 | |
| () | 一个整体,sed反向引用 | |
| {} | o{n,m}前一个字母o,至少连续出现n次,最多连续出现m次 | |
| ? | 连续出现 前一个字符出现0次或1次 |
注意事项:
所有的符号英文符号
学习正则,通过grep命令学习, grep加上单引号
给grep,egrep加上颜色:
alias grep = 'grep — color=auto'和alias egrep='egrep —color=auto'注意系统的字符集:en_US. utf-8(大部分情况没问题),如果出现问题修改字符集为:
export LANG=c快速掌握正则:配合grep -o 参数学习
正则vs通配符
| 分类 | 诞生目标(用途) | 支持的命令 |
|---|---|---|
| 正则(re) | 三剑客,高级语言,进行过滤(匹配字符) | 三剑客grep,sed,awk,find,rename(ubuntu),expr |
| 通配符(pathname extension或glob) | 匹配文件(文件名).txt .log {01..10} | Linux下面大部分命令都支持 |
基础正则详解
1、^... 表示以什么开头的行 ^he
以he开头的行
2、...$
表示以什么结尾的行he$以he结尾的行
有些结尾并不是看到的字符,有些隐藏了(cat -A 显示所有)
3、^$空行(这一行没有任何内容,也没有空格,空格也是个字符)
排除文件中的空行:grep -v '^$'文件
4、.(点)
表示任意一个字符,但是.(点)不匹配空行
5、\ 转义字符:去除原有特殊含义
匹配以点结尾的行 :grep '.$'文件
转义字符序列: ab键
6、* 前一个字符连续出现0 次或0次以上
连续出现:0(0出现一次)00(0出现2次)addfs(字母出现了6次)
7、.* 所有内容(任意内容)
.(点)任意一个字符+ *前一个字符连续出现0
次或0次以上 所以就是所有内容(包括空行)
正则表达式的贪婪性,._表示所有或_连续出现的时候,表现出尽可能贪婪匹配
特殊情况:grep '2*' 文件
或grep '2*' 文件(所有都输出来了)
2*数字2出现了0次或0次以上
0次以上: 2 2222 2222
0次:相当于空 (grep 空就全输出了)
8、[] [abc]1次匹配1个字符,匹配任何一个字符(a或b或c)
[a-z] 代表a到z的小写字母
[A-Z] 代表A到Z的大写字母
[a-zA-Z]或[a-Z]代表大小写字母
[a-Z0-9]代表大小写字母和数字
[a-z]grep 用-i,不区分大小写就是代表大小写字母
[ ]里面的内容去掉特殊含义
如[a-Z|]匹配大小写和|
()小括号 括弧
[ ]中括号
{ } 大括号 花括号
9、[^]取反
如[^abc]匹配a或b或c之外的内容
扩展正则详解
1、+前一个字符连续出现1次或1次以上
grep -E '0+' 文件
0出现一次或一次以上,这三种命令一样效果
grep '0+' 文件grep没用E参数不能使用扩展正则,但是转义字符把扩展正则转为基本正则。不推荐这样使用
1 | egrep '0+' 文件 |
2、 | 或者 如egrep 'apple | APPLE' 文件
| 符号 | 含义 | 应用场景 |
|---|---|---|
| [] | 1次匹配1个字符 [apple] a或p或l或e | 匹配单个字符[]和+ |
| 匹配1个字符或多个 a |
3、()被括起来的内容,表示一个整体(一个字符)、后向引用(反向引用sed)
egrep 'oldb(o|e)y' 文件 匹配oldboy或oldbey的字符
4、{}连续出现
| 符号 | ||
|---|---|---|
| o{n,m} | 前一个字母o,至少连续出现n次,最多连续出现m次 | ≥n ≤m |
| o{n} | 前一个字母o,连续出现n次 | ==n |
| o{n,} | 前一个字母o,至少连续出现n次 | ≥n |
| o{,m} | 前一个字母o,最多连续出现m次 | ≤m |
5、?连续出现 前一个字符出现0次或1次
egrep 'god | gd' 文件等于
egrep 'go?d' 文件
过滤身份证号码: egrep '[0-9]{17}[0-9x]' 文件
(1-17位数字,最后一个是数字或x)
排除文件中的空行或含有#号的行:egrep -v '^$ | #' 文件
表达式[0-255]是一个字符集,它的含义是匹配
0,1,2,5中任意一个字符
[1-9][0-9]可以匹配10到99之间的数字。这两个是最简单的。
grep '搜索内容' 文件
| -a | 将 binary 文件以 text 文件的方式搜寻数据 |
| -c | 计算找到 '搜寻字符串' 的次数 |
| -i | 忽略大小写的不同,所以大小写视为相同 |
| -n | 顺便输出行号 |
| -v | 反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行! |
| --color=auto | 可以将找到的关键词部分加上颜色的显示喔! |
| -o | 显示匹配过程,即只显示匹配到的内容 |
| -E | 支持扩展正则(扩展正则用grep -E 或egrep) |