Linux 正则表达式

文章目录

Linux 正则表达式

正则表达式基础概念

定义与作用

正则表达式是一种用于匹配字符串的模式(pattern),通过将该模式与目标字符串对比,实现对一个或多个特定字符串的查找。它广泛应用于文本处理场景,如搜索、过滤、替换等。

组成结构

正则表达式由普通字符元字符组成,具体如下:

  • 普通字符:未被指定为元字符的所有可打印与不可打印字符,涵盖所有大小写字母(a-z、A-Z)、数字(0-9)、标点符号(如逗号、句号)及其他符号。
  • 元字符 :除普通字符外,具有特殊功能的字符,用于定义匹配规则(如[ ]^$等)。

应用范围

  • 工具:vim(文本编辑器)、grep(文本搜索)、less(分页查看)等。
  • 编程语言:Perl、Python、C 等。

正则表达式分类

类别 特点 适用场景
普通正则表达式 支持基础元字符,功能较简洁 简单的文本匹配、搜索任务
扩展正则表达式 支持更多元字符(如+?{}),功能更丰富 复杂的匹配需求(如限定字符出现次数、多条件选择)

环境准备

word文件为示例,初始内容通过以下命令创建和查看:

bash 复制代码
[root@client ~ 09:26:37]# vim word
cat
category
acat
concatenate
dog

核心匹配规则与示例

直接使用普通字符作为匹配模式,查找包含该字符的字符串。

bash 复制代码
[root@client ~ 09:26:57]# cat word | grep 'cat'
cat
category
acat
concatenate

字符集匹配

[..]:匹配括号内任意一个字符
bash 复制代码
[root@client ~ 09:27:32]# echo cbt >> word 
[root@client ~ 09:27:50]# echo c{1..5}t >> word 
[root@client ~ 09:28:00]# cat word | grep 'c[45]t'
c1t c2t c3t c4t c5t
[root@client ~ 09:28:21]# vim word 
[root@client ~ 09:28:50]# cat word | grep 'c[45]t'
c4t 
c5t
[root@client ~ 09:28:53]# cat word | grep 'c[ab]t'
cat
category
acat
concatenate
cbt
  • 预设字符范围

    字符集 含义 等价写法
    [a-z] 匹配所有小写字母 -
    [A-Z] 匹配所有大写字母 -
    [0-9] 匹配所有数字 -
    [a-zA-Z0-9] 匹配所有字母和数字 [[:alnum:]]
    [a-z] 匹配所有小写字母 [[:lower:]]
    [A-Z] 匹配所有大写字母 [[:upper:]]
    [0-9] 匹配所有数字 [[:digit:]]
    [[:xdigit:]] 匹配十六进制数字(0-9、A-F、a-f) -
    [[:alpha:]] 匹配所有字母(大小写) [a-zA-Z]
    [[:blank:]]/[[:space:]] 匹配空白字符(制表符、换行符、空格等) -
    [[:punct:]] 匹配标点符号(如 $、&、()、* 等) -
    [[:print:]]/[[:graph:]] 匹配可打印字符(字母、数字、标点) -
    [[:cntrl:]] 匹配控制字符(ASCII 中 000-037、177) -
  • 特殊符号处理 :若需匹配-,需将其放在字符集第一个位置

bash 复制代码
[root@client ~ 09:29:01]# cat word | grep 'c[0-9]t'
c1t
c2t 
c3t 
c4t 
c5t
[root@client ~ 09:29:13]# cat word | grep 'c[a-z]t'
cat
category
acat
concatenate
cbt
[root@client ~ 09:29:20]# echo cAt >> word 
[root@client ~ 09:29:35]# cat word | grep 'c[a-z]t'
cat
category
acat
concatenate
cbt
[root@client ~ 09:29:38]# cat word | grep 'c[a-zA-Z0-9]t'
cat
category
acat
concatenate
cbt
c1t
c2t 
c3t 
c4t 
c5t
cAt
[^..]:匹配除括号内字符外的所有字符
bash 复制代码
[root@client ~ 09:30:00]# cat word | grep 'c[^a-z]t'
c1t
c2t 
c3t 
c4t 
c5t
cAt

通配符

bash 复制代码
[root@client ~ 09:30:30]# cat word | grep 'c.t'
cat
category
acat
concatenate
cbt
c1t
c2t 
c3t 
c4t 
c5t
cAt

转义字符

将下一个字符标记为 "原义字符" 或 "特殊字符",常见场景:

bash 复制代码
[root@client ~ 09:31:03]# echo c.t >> word 
[root@client ~ 09:31:16]# cat word | grep 'c\.t'
c.t

多条件选择

扩展正则表达式的元字符,用于匹配 "多个选项中的一个"。普通正则需用\|,扩展正则(egrepgrep -E)直接用|

bash 复制代码
[root@client ~ 09:31:18]# cat word | grep -E 'cat|dog'
cat
category
acat
concatenate
dog

非打印字符

终端中不显示的字符,需通过特殊转义序列匹配,常见如下:

转义序列 含义 等价写法
\cx 匹配控制字符(如\cM匹配回车符) -
\f 匹配换页符 \x0c\cL
\n 匹配换行符 \x0a\cJ
\r 匹配回车符 \x0d\cM
\s 匹配任意空白字符(空格、制表符等) [ \f\n\r\t\v]
\S 匹配任意非空白字符 [^ \f\n\r\t\v]
\w 匹配字母、数字、下划线 [A-Za-z0-9_]
\W 匹配非单词字符 [^A-Za-z0-9_]
\t 匹配制表符 \x09\cI
\v 匹配垂直制表符 \x0b\cK

说明 :grep 命令支持\w\W\s\S

bash 复制代码
[root@client ~ 09:31:18]# cat word | grep -E 'cat|dog'
cat
category
acat
concatenate
dog
[root@client ~ 09:31:39]# ls
anaconda-ks.cfg  word
[root@client ~ 09:39:03]# touch cbt
[root@client ~ 09:39:18]# cat word | grep c*t
cbt
[root@client ~ 09:39:27]# cat word | grep 'c*t'
cat
category
acat
concatenate
cbt
c1t
c2t 
c3t 
c4t 
c5t
cAt
c.t

定位符

用于限定字符串在 "行" 或 "单词" 中的位置,常见如下:

定位符 功能 示例
^ 匹配行首位置 grep '^cat' words(匹配以 "cat" 开头的行,输出 "cat")
$ 匹配行末位置 grep 'cat$' words(匹配以 "cat" 结尾的行,输出 "cat""acat")
\b 匹配单词边界(单词与非单词的分隔处) grep '\bcat' words(匹配 "cat" 作为单词开头,输出 "cat""category""hello cat");grep 'cat\b' words(匹配 "cat" 作为单词结尾,输出 "cat""acat""hello cat")
\B 匹配非单词边界 grep '\Bcat' words(匹配 "cat" 不在单词边界,输出 "acat""concatenate")
< 匹配单词左边界 grep '\<cat' words(同\bcat,输出 "cat""category""hello cat")
> 匹配单词右边界 grep 'cat\>' words(同cat\b,输出 "cat""acat""hello cat")
bash 复制代码
[root@client ~ 10:01:42]# cat word | grep '^cat'
cat
category
[root@client ~ 10:01:57]# cat word | grep 'cat$'
cat
acat
[root@client ~ 10:02:05]# echo hello cat >> word 
[root@client ~ 10:02:22]# cat word | grep '\bcat'
cat
category
hello cat
[root@client ~ 10:02:30]# cat word | grep 'cat\b'
cat
acat
hello cat
[root@client ~ 10:02:41]# cat word | grep '\bcat\b'
cat
hello cat
[root@client ~ 10:02:51]# cat word | grep '\Bcat'
acat
concatenate

限定次数

通过元字符限定 "前面子表达式" 的出现次数,仅在扩展正则(egrep/grep -E)中生效

限定符 功能 示例
* 匹配前面子表达式任意次数(0 次及以上) grep -E 'do*g' words(匹配 "dg""dog""doog",输出 "dg""dog""doog")
+ 匹配前面子表达式1 次及以上 grep -E 'do+g' words(匹配 "dog""doog",输出 "dog""doog")
? 匹配前面子表达式0 次或 1 次 grep -E 'do?g' words(匹配 "dg""dog",输出 "dg""dog")
{m} 匹配前面子表达式恰好 m 次 grep -E 'do{2}g' words(匹配 "doog",输出 "doog")
{m,n} 匹配前面子表达式m-n 次(含 m 和 n) grep -E 'do{2,3}g' words(匹配 "doog""dooog",输出 "doog""dooog")
{m,} 匹配前面子表达式m 次及以上 grep -E 'do{2,}g' words(匹配 "doog""dooog""doooog",输出对应内容)
{,n} 匹配前面子表达式0-n 次 grep -E 'do{,3}g' words(匹配 "dg""dog""doog""dooog",输出对应内容)
bash 复制代码
[root@client ~ 10:22:03]# echo dg >> word 
[root@client ~ 10:22:23]# echo dog >> word 
[root@client ~ 10:22:33]# echo dooog >> word 
[root@client ~ 10:22:37]# cat word | grep 'do*g'
dog
dg
dog
dooog
[root@client ~ 10:22:53]# cat word | grep 'do+g'
[root@client ~ 10:23:05]# cat word | egrep 'do+g'
dog
dog
dooog
[root@client ~ 10:23:16]# cat word | egrep 'do?g'
dog
dg
dog
[root@client ~ 10:23:25]# cat word | egrep 'do{3}g'
dooog
[root@client ~ 10:23:53]# cat word | egrep 'do{0,3}g'
dog
dg
dog
dooog
[root@client ~ 10:24:04]# cat word | egrep 'do{1,}g'
dog
dog
dooog
[root@client ~ 10:24:13]# cat word | egrep 'do{,1}g'
dog
dg
dog
相关推荐
Wang's Blog1 小时前
Linux小课堂: 基于 SSH 的安全文件传输与增量同步机制深度解析之从 wget 到 rsync 的全流程实战
linux·ssh·1024程序员节
yy7634966682 小时前
WPF 之 简单高效的Revit多语言支持方案
java·大数据·linux·服务器·wpf
Heavy sea5 小时前
Linux串口应用编程
linux·c语言·1024程序员节
Justin_195 小时前
Galera Cluster部署
linux·服务器·nginx
洛克大航海8 小时前
虚拟机 Ubuntu 中安装 Google Chrome 浏览器
linux·chrome·ubuntu
java_logo8 小时前
Docker 部署 WordPress 全流程
运维·docker·容器·word·php·1024程序员节
小小的木头人8 小时前
Ubuntu 自动挂载移动硬盘
运维
DeeplyMind8 小时前
AMD rocr-libhsakmt分析系列3-4:svm-reserve模式实现分析
linux·驱动开发·1024程序员节·amdgpu·kfd·rocr
大米粥哥哥8 小时前
Qt QProcess基于Linux的命令管道符号无效问题【已解决】
linux·qt·shell·qprocess·1024程序员节·管道符号
Mr. Sun_9 小时前
Dell Networking SmartFabric OS10 如何设置虚拟链路中继 (VLT)
运维·网络·dell vlt