0%

正则表达式(视频笔记)

本文为该视频(三剑客正则)的笔记分享。

基本用法

正则表达式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)
+