目录
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
一、正则表达式
1、正则表达式概述
通常用于判断语句中,用来检查某一字符串是否满足某一格式
正则表达式是由普通字符与元字符组成
普通字符包括大小写字母、数字、标点符号及一些其他符号
元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式
Linux 中常用的有两种正则表达式引擎
Linux 中常用的有两种正则表达式引擎
- 基础正则表达式:BRE
- 扩展正则表达式:ERE
文本处理工具 | 基础正则表达式 | 扩展正则表达式 |
vi编辑器 | 支持 | \ |
grep | 支持 | \ |
egrep | 支持 | 支持 |
sed | 支持 | \ |
awk | 支持 | 支持 |
2、基础正则表达式
基础正则表达式是常用的正则表达式部分,常用的元字符及作用如下表所示:
元字符 | 作用 |
\ | 转义字符,用于取消特殊符号的含义,如:\!,\n |
^ | 匹配字符串开始的位置,如:^world匹配以world开头的行 |
$ | 匹配字符串结束的位置,如: world$匹配以world结尾的行 |
. | 匹配除\n(换行)之外的任意的1个字符 |
* | 匹配前面子表达式0次或者多次 |
[list] | 匹配list列表中的一个字符,如:[0-9]匹配任意一位数字 |
[list] | 匹配任意不在list列表中的1个字符,如:[^0-9]匹配任意一位非数字字符 |
n \} | 匹配前面的子表达式n次,如:[0-9][2\}匹配两位数字 |
\n,\} | 匹配前面的子表达式不少于n次,如:[0-9]1{2,\}表示两位及两位以上数字 |
\n,m\ } | 匹配前面的子表达式n到m次,如:[a-z]{2,3\}匹配两到三位的小写字母 |
注意 egrep, awk使用{n}、{n,}、{n,m}匹配时“{}"前不用加“\”
egrep -E -n 'wo{2}d' test.txt -E用于显示文件中符合条件的字符
egrep -E -n 'wo{2,3}d' test.txt
3、扩展正则表达式
- 扩展正则表达式是对基础正则表达式的扩充和深化
- 支持的工具有 egerp 和 awk
- 扩展正则表达式元字符
-
元字符
作用
+
匹配前面了表达式1次以上,如:go+d,将匹配至少一个o
?
匹配前面子表达式0次或者1次,如: go?d,将匹配gd或god
()
将括号中的字符串作为一个整体,如: g(oo)+d,将匹配。整体1次以上,如good,gooood等
|
以或的方式匹配字条串,如:good l great,将匹配 good或考sgU@风雪一更ing
定位符
^ 匹配输入字符串开始的位置 $匹配输入字符串结尾的位置非打印字符
\n匹配一个换行符\r匹配一个回车符
\t匹配一个制表符
二、grep命令
grep命令使用正则表达式来搜索文本,并且把匹配的文本打印出来
格式:
grep [options] pattern [file] option表示选项,pattern表示匹配的模式。file表示一系列文件名。
常用选项:
-c 只打印匹配的文本行的次数,不显示文本内容。 -i 匹配时忽略字母大小写 -h 当搜索多个文件,不显示匹配文件名前缀。 -l 只列出含义匹配的文本行的文件的文件名,不显示其具体匹配的内容。 -n 列出所有匹配的文本行,并显示行号 -s 不显示关于不存在或无法读取文件的错误信息 -v 只显示不匹配的文本行,反向选择,显示与搜索字符串不相符的行。 -w 匹配整个单词 -x 匹配整个文本行 -r 递归搜索,不仅搜索当前目录,还有各级子目录 -E 开启扩展(extend)的正则表达式 --color=auto 可以将找到的关键词部分加上颜色的显示
1、统计包含某个字符的文本行的行数
-c 只打印匹配的文本行的次数,不显示文本内容。
2、不区分大小写查找the所有的行
-i 匹配时忽略字母大小写
3、将非空行写入到文件中
4、过滤出IP地址
三、元字符操作案例
1、查找特定字符
查找出test文件中root的位置,其中“-n”表示显示行号、“-i”表示不区分大小写。命令执行后,符合匹配标准的字符, 字体颜色会变为红色。
2、查找特定集合字符
2.1 查找既有i又有o的特殊字
-
想要查找“switches”与“switch”这两个字符串时,可以发现这两个字符串均包含“sh”与“rt”。此时执行以下命令即可同时查找到“switches”与“switch”这两个字符串,其中“[]”中无论有几个字符, 都仅代表一个字符,也就是说“[io]”表示匹配“i”或者“o”。
-
2.2 查找单个重复字符
查找重复字符,例如“oo”时,会显示两个o及两个o以上的行
- 2.3查找o前面不是大小写字母开头的行
2.4查找包含数字的行
2.5查找除大小写字母开头的行
2.6查找以.结尾的行
3、查找以w开头,以d结尾的行
4、查找连续字符范围“{}”
4.1 查询2个o的字符