第七章 正则表达式

目录

[1.1. 概念:](#1.1. 概念:)

[1.2. 基本正则表达式](#1.2. 基本正则表达式)

[1.2.1. 常见元字符](#1.2.1. 常见元字符)

[1.2.2. POSIX字符类](#1.2.2. POSIX字符类)

[1.2.3. 示例](#1.2.3. 示例)

[1.3. 扩展正则表达式](#1.3. 扩展正则表达式)

[1.3.1. 概念](#1.3.1. 概念)

[1.3.2. 示例](#1.3.2. 示例)


1.1. 概念:

在进行程序设计的过程中,用户会不可避免地遇到处理某些文本的情况。有的时候,用户还需要查找符合某些比较复杂规则的字符串。对于这些情况,如果单纯依靠程序设计语言本身,则往往会使得用户通过复杂的代码来实现。但是,如果使用正则表达式,则会以非常简短的代码来完成

正则表达式是通过一些特殊字符的排列,用以查找、替换、删除一行或多行文字字符串,简单的说,正则表达式就是用在字符串的处理上面的一项表示式。由于正则表达式语法简练,功能强大,得到了许多程序设计语言的支持,包括Java、C++、Perl以及Shell等

1.2. 基本正则表达式

基本正则表达式(Basic Regular Expression,BRE),又称为标准正则表达式,是最早制订的正则表达式规范,仅支持最基本的元字符集。基本正则表达式是POSIX规范制订的两种正则表达式语法标准之一,另外一种语法标准称为扩展正则表达式

1.2.1. 常见元字符

1.2.2. POSIX字符类

POSIX字符类是一个形如 [:...:] 的特殊元序列(meta sequence),他可以用于匹配特定的字符范围

1.2.3. 示例

ab\] : 检索包含a或包含b的行信息,\[ \] 中只能表示一个内容 # 检索包含d或者D的行信息 [root@server ~]# grep -n [dD] /etc/passwd # 检索包含字母o的行信息 [root@server ~]# grep -n [oo] /etc/passwd \[\^ \] : 根据关键字检索后反向显示(反向着色) # 检索不包含字母o的行信息 [root@server ~]# grep -n [^o] /etc/passwd # 检索不以r开头且包含oot的行信息 [root@server ~]# grep -n [^r]oot /etc/passwd \[-\] : 表示范围,如:\[0-9\] \[a-z\] \[A-Z\] \[a-zA-Z

复制代码
# 检索包含7-9的行信息
[root@server ~]# grep -n [7-9] /etc/passwd

# 检索包含大写字母的行信息
[root@server ~]# grep -n [A-Z] /etc/passwd

# 检索包含数字和字母的行信息
[root@server ~]# grep -n [0-9a-zA-Z] /etc/sos/sos.conf

# 上例改写
[root@server ~]# grep -n [[:alnum:]] /etc/sos/sos.conf

^行首与$行尾

复制代码
# 检索root开头的行信息
[root@server ~]# grep -n ^root /etc/passwd

# 检索以#开头的行信息
[root@server ~]# grep -n "^#" /etc/sos/sos.conf

# 检索以"[" 开头的行信息
[root@server ~]# grep -n "^\[" /etc/sos/sos.conf

# 检索以数字结尾的行信息
[root@server ~]# grep -n "[0-9]$" /etc/sos/sos.conf

# 检索空白行
[root@server ~]# grep -n "^$" /etc/sos/sos.conf

# 注意
[root@server ~]# grep -n ^[root] /etc/passwd # 检索以r开头或o开头或t开头,独立对待

[root@server ~]# grep -n ^root /etc/passwd # 检索root开头,整体对待

[root@server ~]# grep -n [^root] /etc/passwd # 检索不包含r或o或t的,反向着色
# 注意:^[] 与 [^] 区别

点(.) 与星号(*)

复制代码
# 检索以r开头t结尾中间只有2个字符的行信息
[root@server ~]# grep -n r..t /etc/passwd

# 检索至少包含1个w字母的行信息
[root@server ~]# grep -n ww* /etc/passwd

# 检索至少包含2个字母o的行信息
[root@server ~]# grep -n ooo* /etc/passwd

# 检索包含(.)的行信息
[root@server ~]# grep -n "\." /etc/passwd # 需要加双引号

1.3. 扩展正则表达式

1.3.1. 概念

扩展正则表达式(Extended Regular Expression,ERE)支持比基本正则表达式更多的元字符,但是扩展正则表达式对有些基本正则表达式所支持的元字符并不支持。前面介绍的元字符"^"、"$"、"."、"*"、"[]"以及"[^]"这6个元字符在扩展正则表达式都得到了支持,并且其意义和用法都完全相同,不再重复介绍。接下来重点介绍一下在扩展正则表达式中新增加的一些元字符。

1.3.2. 示例

复制代码
# 显示/etc/passwd 中以bash结尾的行信息
[root@server ~]# grep -n "bash$" /etc/passwd
# 找出/etc/passwd中包含三位数或者四位数的行信息
[root@server ~]# grep -n "\<[0-9]\{3,4\}\>" /etc/passwd
# 上例改写
[root@server ~]# grep -n "\<[[:digit:]]\{3,4\}\>" /etc/passwd

# 检索/etc/grub2.cfg文件中,以至少一个空白字符开头,后面跟上非空白字符的行
[root@server ~]# grep -n "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg
# 分析
# ^[[:space:]] :表示以空白字符开头
# \+:grep不支持扩展正则的元字符,需要转义
# [^[:space:]]:不包含非空白字符
# grep可以使用-E参数启用扩展正则,命令改为:
[root@server ~]# grep -nE "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg
# 也可以使用egrep,其支持扩展正则,命令改为
[root@server ~]# egrep -n "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg

                                
# 检索netstat -tan 命令的运行结果中,以"LISTEN"后跟上0个或多个空白字
符结尾的行信息
[root@server ~]# netstat -tan | grep "LISTEN[[:space:]]*$"
# *$表示重复前面0次或多次,$为结尾
                                   
# 检索fdisk -l 命令结果中,包含以/dev/开头后跟上n的行信息
[root@server ~]# fdisk -l | grep "^/dev/n"
                                   
# 检索 ldd /usr/bin/cat 命令结果中的文件路径
[root@server ~]# ldd /usr/bin/cat | grep -oE "/[^[:space:]]+"
# -o:只显示检索命中的标红内容
# -E:启用扩展正则
                                   
# 检索/proc/meminfo文件中,所有以大写A或大写S开头的行信息
[root@server ~]# grep -n "^[AS]" /proc/meminfo
                                   
# 显示/etc/passwd文件中当root、sshd、chrony的相关信息
[root@server ~]# egrep -n "(root|sshd|chrony)" /etc/passwd
# 需要使用egrep,其支持扩展正则
# (|) 会对|左右两边的整体内容进行匹配
                                   
# echo输出一个绝对路径,使用egrep取出其基名
[root@server ~]# echo /etc/yum.repos.d/ | egrep -o [^/]+/?$
                                   
# 检索ifconfig命令结果的1-255之间的整数
[root@server ~]# ifconfig | egrep -o "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"
相关推荐
2302_8097983211 分钟前
【JavaWeb】MySQL
数据库·mysql
drowingcoder18 分钟前
MySQL相关
数据库
Musennn1 小时前
MySQL刷题相关简单语法集合
数据库·mysql
Think Spatial 空间思维2 小时前
【HTTPS基础概念与原理】TLS握手过程详解
数据库·网络协议·https
逝水如流年轻往返染尘2 小时前
MySQL表的增删查改
mysql
laowangpython2 小时前
MySQL基础面试通关秘籍(附高频考点解析)
数据库·mysql·其他·面试
mooyuan天天3 小时前
SQL注入报错“Illegal mix of collations for operation ‘UNION‘”解决办法
数据库·web安全·sql注入·dvwa靶场·sql报错
运维-大白同学3 小时前
go-数据库基本操作
开发语言·数据库·golang
R-sz3 小时前
通过从数据库加载MinIO配置并初始化MinioClient,spring boot之Minio上传
数据库·oracle
洛阳泰山3 小时前
Windows系统部署MongoDB数据库图文教程
数据库·windows·mongodb