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
相关推荐
maosheng11466 小时前
RHCSA的第一次作业
linux·运维·服务器
wifi chicken7 小时前
Linux 端口扫描及拓展
linux·端口扫描·网络攻击
旺仔.2917 小时前
Linux 信号详解
linux·运维·网络
放飞梦想C7 小时前
CPU Cache
linux·cache
Hoshino.418 小时前
基于Linux中的数据库操作——下载与安装(1)
linux·运维·数据库
恒创科技HK9 小时前
通用型云服务器与计算型云服务器:您真正需要哪些配置?
运维·服务器
吴佳浩 Alben9 小时前
GPU 生产环境实践:硬件拓扑、显存管理与完整运维体系
运维·人工智能·pytorch·语言模型·transformer·vllm
播播资源10 小时前
CentOS系统 + 宝塔面板 部署 OpenClaw源码开发版完整教程
linux·运维·centos
源远流长jerry10 小时前
在 Ubuntu 22.04 上配置 Soft-RoCE 并运行 RDMA 测试程序
linux·服务器·网络·tcp/ip·ubuntu·架构·ip
学不完的10 小时前
Docker数据卷管理及优化
运维·docker·容器·eureka