千家信息网

Shell编程之正则表达式三剑客——grep,egrep

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,正则表达式概述正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。基础正则表达式正则
千家信息网最后更新 2026年11月02日Shell编程之正则表达式三剑客——grep,egrep

正则表达式概述

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。

基础正则表达式

正则表达式的字符串表达方法根据不同的严谨程度与功能分为基本正则表达式与扩展正则表达式。基础正则表达式是常用的正则表达式的最基础的部分。在 Linux 系统中常见的文件处理工具中 grep 与 sed 支持基础正则表达式,而 egrep 与 awk 支持扩展正则表达式。

基础正则表达式示例

以httpd服务的配置文件为例(/etc/httpd/conf/httpd.conf)
1)查找特定字符-n:显示行号  -i:不区分大小写查找出目标文件中带有"the"的字符
[root@localhost conf]# grep -n 'the' httpd.conf

若反向查找,查找不包含"the"字符的行,则需要通过"-vn"选项实现
[root@localhost conf]# grep -vn 'the' httpd.conf

2)利用中括号"[ ]"来查找集合字符(先创建一个自定义的文本文件a.txt)
想要查找"shirt"与"short"这两个字符串时,可以发现这两个字符串均包含"sh" 与"rt"。此时执行以下命令即可同时查找到"shirt"与"short"这两个字符串。"[]"中无论有几个字符,都仅代表一个字符,也就是说"[io]"表示匹配"i"或者"o"。

#a.txt实验文本shortshirtootoolswoodwooooooodWoodthe footballthis the web123123456456.
[root@localhost ~]# grep -n 'sh[io]rt' a.txt

若要查找包含重复单个字符"oo"时,只需要执行以下命令即可[root@localhost ~]# grep -n 'oo' a.txt

若查找"oo"前面不是"w"的字符串,只需要通过集合字符的反向选择"[^]"来实现该目的

[root@localhost ~]# grep -n '[^w]oo' a.txt

在上述命令的执行结果中发现"wooooood"也符合匹配规则,包含"w"。其实通过执行结果就可以看出,符合匹配标准的字符加粗显示,而上述结果中可以得知,"#wooooood #"中加粗显示的是"oooooo",而"oo"前面的"o"是符合匹配规则的。

若不希望"oo"前面存在小写字母a-z A-Z 数字0-9
[root@localhost ~]# grep -n '[^a-z]oo' a.txt

3)查找行首"^"与行尾字符"$"
基础正则表达式包含两个定位元字符:"^"(行首)与"$"(行尾)。在上面的示例中,查询"the"字符串时出现了很多包含"the"的行,如果想要查询以"the"字符串为行首的行,则可以通过"^"元字符来实现。

[root@localhost ~]# grep -n '^the' test.txt

查询以小写字母开头的行可以通过"^[a-z]"规则来过滤,查询大写字母开头的行则使用"^[A-Z]"规则,若查询不以字母开头的行则使用"^[^a-zA-Z]"规则。

[root@localhost ~]# grep -n '^[^a-zA-Z]'  a.txt

"^"符号在元字符集合"[]"符号内外的作用是不一样的,在"[]"符号内表示反向选择,在"[]"符号外则代表定位行首。反之,若想查找以某一特定字符结尾的行则可以使用"$"定位符。例如,执行以下命令即可实现查询以小数点(.)结尾的行。因为小数点(.) 在正则表达式中也是一个元字符(后面会讲到),所以在这里需要用转义字符"\"将具有特 殊意义的字符转化成普通字符。空行使用^$即可。

[root@localhost ~]# grep -n '\.$' a.txt 

4)查找任意一个字符"."与重复字符"*"
前面提到,在正则表达式中小数点(.)也是一个元字符,代表任意一个字符。例如, 执行以下命令就可以查找"w??d"的字符串,即共有四个字符,以 w 开头 d 结尾。

在上述结果中,"wood"字符串"w..d"匹配规则。若想要查询 oo、ooo、ooooo 等资料,则需要使用星号()元字符。但需要注意的是,""代表的是重复零个或多个前面的单字符。

[root@localhost ~]# grep -n 'oo*' a.txt 

查询以 w 开头 d 结尾,中间的字符可有可无的字符串。
[root@localhost ~]# grep -n 'w.d' a.txt
查询任意数字所在行。
[root@localhost ~]# grep -n '[0-9][0-9]
' a.txt

5)查找连续字符范围"{}"

查询以 w 开头以 d 结尾,中间包含 2~5 个 o 的字符串。
[root@localhost ~]# grep -n 'wo{2,5}d' a.txt
查询以 w 开头以 d 结尾,中间包含 2 个 o 以上的字符串。
[root@localhost ~]# grep -n 'wo{2,}d' a.txt

元字符总结

常见的基础正则表达式的元字符主要包括以下几个

扩展正则表达式

通常情况下会使用基础正则表达式就已经足够了,但有时为了简化整个指令,需要使用范围更广的扩展正则表达式。
grep 命令仅支持基础正则表达式,如果使用扩展正则表达式,需要使用 egrep 或 awk 命令。

扩展正则表达式常见元字符

字符 正则 表达式 字符串 查询 元字符 基础 规则 命令 开头 两个 代表 字母 文件 符号 结果 常见 定位 支持 可以通过 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司排名 湖北九亚互联网络科技有限公司 朗新科技与工业互联网 互联网科技社 北京互联网科技有限公司 万易互联网科技 北京互联网络科技有限公司 科技互联网公司logo 奔汉互联网科技 互联网科技的未来发展 衡水科技产业互联网平台 老年人脱离互联网科技的作文 安控科技rtu产品工业互联网 西藏七维空间互联网科技有限公司 互联网科技实习生岗位职责 厦门比较好的科技互联网公司 互联网科技与大数据专业 本届互联网博览会上的黑科技 互联网科技企业商标注意事项 科技互联网专业务虚会材料 广州万易互联网科技有限公司 万易互联网科技 未来的互联网科技 和信科技工业互联网 中和天地互联网科技有限公司 中科明德北京互联网科技 工业互联网展湾科技股份有限公司 四川互联网展示科技馆设计 悟空问答互联网科技 互联网大会出现的黑科技
0