目录
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
一、正则表达式
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的字符

本文介绍了正则表达式的基础概念,如 BRE 和 ERE 的区别,以及grep命令在Linux中的应用,包括统计字符、大小写不敏感搜索、过滤IP地址等实例。元字符操作案例详细展示了如何查找特定字符、重复字符和复杂模式。
484

被折叠的 条评论
为什么被折叠?



