Linux--正则表达式详解

1.1概念

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

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

1.2基本正则表达式

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

1.2.1常见元字符

bash 复制代码
元字符						说明
^						以某个字符开头
$						以某个字符结尾
.						匹配任意单字符
*						对前一项进行0次或者多次重复
{m,n}					匹配将前一项字符重复m-n次,{m,},,n},{m,n}
[]						对方括号内的单字符进行匹配
[^]						不匹配方括号内的单字符
^[]						匹配以某个字符开头的行
()						定义一个子表达式
词首【\<或\b】【\>或\b】	其后面的任意字符必须作为单词首部出现;其前面的任意字符必须作单词和词尾锚定为尾部出现
\						转义字符,让一些特殊符号失效

1.2.2POSIX字符类

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

1.2.3示例

[ab]:检索包含a或包含b的行信息,注意:[ ]只能表示一个对象

bash 复制代码
# 检索包含d或者D行的信息
[root@server ~]# grep -n [dD] /etc/passwd

#检索字母包含o的行信息
[root@server ~]# grep -n [oo] /etc/passwd

[^] :检索不包含关键字的行信息(反向着色)

bash 复制代码
# 检索不包含字母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] [0-9a-zA-Z]

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

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

#检索数字和字母的行信息
[root@server ~]# grep -n [[:alnum:]] /etc/passwd
[root@server ~]# grep -n  [0-9a-zA-Z] /etc/passwd

^行首与$行尾

bash 复制代码
# 检索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 
6:#verbose = 3
9:#log-size = 15
[root@server ~]# grep -n "[0-9]$"  /etc/sos/sos.conf 

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

# 注意
# 检索不包含r o t 
[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

点(.)和(*)

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

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

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

# 检索以包含.的行信息
[root@server ~]# grep -n "\."  /etc/passwd

1.3拓展正则表达式

1.3.1概念

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

bash 复制代码
元字符		     说明
?				 将前一项字符进行0次或者1次的重复匹配
+                将前一项进行1次或者多次的重复匹配
(|)			 匹配(|)符号左边或者右边的字符

1.3.2示例

bash 复制代码
# 显示文件以bash结尾的行信息
[root@server ~]# grep -n bash$ /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 ~]# egrep -n "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg 
[root@server ~]# grep -n  "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg 
[root@server ~]# grep -nE  "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg 
#解释
#	^[[:space:]]:以空白字符开头
#	至少出现一次
#	[^[:space:]]:不包含空白字符
#	-E:支持启用扩展正则
bash 复制代码
# 查看端口号
[root@server ~]# netstat -tan

#检索netstat -tan  显示信息中包含LISTEN后跟上0个或多个空白字符结尾方行信息
[root@server ~]# netstat -tan | grep "LISTEN[[:space:]]*$"
# *$:重复前面内容0次或多次作为行结尾

#检索fdisk -l显示内容中包含以/dev开头后跟上n的相关信息
[root@server ~]# fdisk -l | grep ^/dev/n

# 检索/proc/meminfo文件中,所有以大写A或者大写S开头的行信息
[root@server ~]# grep -n ^[AS]  /proc/meminfo 

# 显示/etc/passwd 文件中root、sshd、chrony的相关信息
[root@server ~]# grep -nE "(root|sshd|chorny)"   /etc/passwd
[root@server ~]# egrep -n "(root|sshd|chorny)"   /etc/passwd

# 检索ifconfig命令显示结果中的1-255的整数共
[root@server ~]# ifconfig | grep -oE "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-9])\>" 
[root@server ~]# ifconfig | grep -o  "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-9])\>" 

# 检索1dd /usr/bin/cat 命令结果中的文件路径
[root@server ~]# ldd /usr/bin/cat | grep -Eo  /[^[:space:]]+
/lib64/libc.so.6
/lib64/ld-linux-x86-64.so.2
相关推荐
疯一样的码农10 小时前
Python 正则表达式(RegEx)
开发语言·python·正则表达式
小白学大数据13 小时前
正则表达式在Kotlin中的应用:提取图片链接
开发语言·python·selenium·正则表达式·kotlin
萧鼎1 天前
【Python】强大的正则表达式工具:re模块详解与应用
开发语言·python·正则表达式
叮当喵是mao2 天前
接口测试(十)jmeter——关联(正则表达式提取器)
jmeter·正则表达式
Winston Wood4 天前
你需要了解的正则表达式相关知识
正则表达式
落霞的思绪4 天前
Javase——正则表达式
正则表达式
crownyouyou5 天前
python正则表达式
开发语言·python·正则表达式
ch_s_t7 天前
正则表达式
正则表达式
徐浪老师7 天前
两个有序链表序列的交集
正则表达式
flying robot7 天前
正则表达式(Regular Expressions)
正则表达式