当前位置: 首页 > news >正文

grep 命令使用手册详解

grep 命令使用手册详解

一、正则表达式基础概念

文档首先明确正则表达式的核心定义与构成,为后续语法学习奠定基础。

1. 核心定义
  • 本质:一种用于匹配字符串的 “模式(pattern)”,通过该模式可在文本中查找 1 个或多个目标字符串。

  • 构成

    :由 “普通字符” 和 “元字符” 组成,是独立于工具 / 语言的语法体系。

    • 普通字符:无特殊含义的可打印 / 不可打印字符,包括大小写字母(a-Z)、数字(0-9)、标点符号(如,!)等。
    • 元字符:具有特殊匹配功能的字符(如[ ]^$),是正则表达式的核心。
  • 应用场景:Linux 工具(vimgrepless)和编程语言(Perl、Python、C)均支持正则表达式。

2. 分类

正则表达式在 Linux 中主要分为两类,核心差异是支持的元字符数量:

  • 普通正则表达式:支持基础元字符(如[ ].),需通过grep(默认)、sed(默认)等工具使用。
  • 扩展正则表达式:支持更多元字符(如+?{ }()),需通过egrepgrep -Esed -r等工具启用。

二、环境准备:实操文本与初始代码

文档以一个名为words的文本文件为实操对象,先通过vim创建并初始化内容,后续所有案例均基于该文件展开。

1. 创建与初始化words文件
[root@server ~ 09:25:59]# vim words
[root@server ~ 09:26:27]# cat words | grep 'cat'
cat
category
acat
concatenate

三、核心语法与实操代码

文档按 “字符匹配→位置匹配→次数限定→特殊场景” 的逻辑,逐一讲解正则语法,并配套完整代码案例。

1. 普通字符匹配(基础)

普通字符直接作为模式匹配,无特殊处理,常用于精确查找固定字符串。

案例:在words文件中查找包含 “cat” 的行

字符集匹配([ ][^ ]

通过[ ]定义 “字符集合”,匹配集合中的任意一个字符[^ ]则匹配 “除集合外的任意字符”,是正则中最常用的字符匹配方式。

(1)基础字符集[ ]
  • 语法[字符1字符2...][范围](如[a-z][0-9])。
  • 案例 1:匹配 “c” 和 “t” 之间是 “a” 或 “b” 的字符串(即c[a/b]t
[root@server ~ 09:26:42]# echo cbt >> words 
[root@server ~ 09:27:03]# echo c1t >> words 
[root@server ~ 09:27:08]# cat words |grep 'c[ab]t'
cat
category
acat
concatenate
cbt
  • 案例 2:按字符范围匹配(小写字母、大写字母、数字)
[root@server ~ 09:27:27]# cat words | grep 'c[a-z]t'
cat
category
acat
concatenate
cbt
[root@server ~ 09:28:02]# echo cCt >> words 
[root@server ~ 09:28:20]# cat words | grep 'c[A-Z]t'
cCt
[root@server ~ 09:28:31]# cat words | grep 'c[0-9]t'
c1t
[root@server ~ 09:28:43]# cat words | grep 'c[a-z0-9]t'
cat
category
acat
concatenate
cbt
c1t#匹配- 要在前面加上-号
[root@server ~ 09:30:03]# echo c-t >> words 
[root@server ~ 09:30:25]# cat words | grep 'c[-a-z0-9]t'
cat
category
acat
concatenate
cbt
c1t
c-t
反向字符集[^ ]
  • 语法[^字符1字符2...],匹配 “除集合内字符外的任意字符”。
  • 案例:匹配 “c” 和 “t” 之间不是“a” 或 “b” 的字符串
[root@server ~ 09:30:30]# cat words | grep 'c[^ab]t'
c1t
cCt
c-t
[root@server ~ 09:31:18]# cat words | grep 'c[a^b]t'
cat
category
acat
concatenate
cbt
[root@server ~ 09:31:36]# cat words | grep 'c[ab]t'
cat
category
acat
concatenate
cbt
通配符匹配(.

是基础元字符,匹配 “除换行符(\n)外的任意单个字符”,相当于 “任意字符占位符”。

案例:匹配 “c” 和 “t” 之间有任意 1 个字符的字符串(c.t

[root@server ~ 10:25:01]# cat words | egrep 'c.t'
cat
category
acat
concatenate
cbt
c1t
cCt
c-t
c.t
hello cat
转义字符(\

\用于 “取消元字符的特殊含义”(将元字符转为普通字符),或 “激活普通字符的特殊含义”(如\n表示换行符)。

案例 1:匹配普通小数点(.

[root@server ~ 10:23:48]# cat words | egrep 'c\.t'
c.t
逻辑或匹配(|,扩展正则)

|是扩展元字符,用于 “二选一匹配”(A 或 B),需用egrepgrep -E启用扩展正则。

案例:在words中匹配 “cat” 或 “dog”

# 方法1:用egrep
[root@server ~ 10:25:07]# cat words | egrep 'cat|dog'
cat
category
acat
concatenate
dog
hello cat
dog# 方法2:用grep -E(效果同egrep)
[root@server ~ 10:26:52]# cat words | grep -E 'cat|dog'
cat
category
acat
concatenate
dog
hello cat
dog
预定义字符集([[:xxx:]]

文档提供了 Linux 正则中常用的 “预定义字符集”,用于简化常见匹配场景(如数字、字母),兼容性更强(适配不同字符编码)。

预定义字符集描述等价普通写法(ASCII 环境)
[[:digit:]]数字(0-9)[0-9]
[[:xdigit:]]十六进制数字(0-9、A-F、a-f)[0-9A-Fa-f]
[[:lower:]]小写字母(a-z)[a-z]
[[:upper:]]大写字母(A-Z)[A-Z]
[[:alpha:]]所有字母(大小写)[a-zA-Z]
[[:alnum:]]字母 + 数字[a-zA-Z0-9]
[[:blank:]]/[[:space:]]空白字符(空格、制表符、换行符等)[ \t\n\r\f\v]
[[:punct:]]标点符号(如$&()-等)[$&'()*+,-./:;<=>?@[\]^_{}~]`
[[:print:]]/[[:graph:]]可打印字符(字母 + 数字 + 标点)[a-zA-Z0-9[:punct:]]
[[:cntrl:]]控制字符(ASCII 中 000-037、177)-
非打印字符匹配

非打印字符(如换行符、制表符)需用转义序列匹配,文档列出了常用场景:

转义序列描述等价写法
\cX控制字符(X 为 A-Z/a-z),如\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,无需扩展正则。

定位符(匹配字符串位置)

定位符不匹配具体字符,仅匹配 “字符的位置”(如行首、行末、单词边界),常用于精确限定目标字符串的位置。

行首匹配(^
  • 语法^目标字符串,匹配 “以目标字符串开头的行”。
  • 案例:匹配以 “cat” 开头的行
[root@server ~ 10:02:23]# cat words | grep '^cat'
cat
category
行末匹配($
  • 语法目标字符串$,匹配 “以目标字符串结尾的行”。

  • 案例:匹配以 “cat” 结尾的行

    [root@server ~ 10:02:35]# cat words | grep 'cat$'
    cat
    acat
    
单词边界匹配(\b
  • 语法\b目标字符串(目标字符串在单词开头)、目标字符串\b(目标字符串在单词结尾)、\b目标字符串\b(目标字符串是独立单词)。
  • 案例:先追加 “hello cat”,再匹配单词边界
[root@server ~ 10:02:54]# echo hello world >> words 
[root@server ~ 10:03:23]# cat words | grep '\bcat'
cat
category
[root@server ~ 10:03:34]# echo hello cat >> words 
[root@server ~ 10:04:19]# cat words | grep 'cat\b'
cat
acat
hello cat
限定符(匹配次数,扩展正则)

限定符用于 “指定前一个子表达式的匹配次数”(如 “匹配 1 次以上”“匹配 2-3 次”),均为扩展元字符,需用egrepgrep -E

限定符语法描述案例
*子表达式*匹配前一子表达式任意次数(0 次、1 次、多次)do*g匹配dg(o0 次)、dog(o1 次)、doog(o2 次)
+子表达式+匹配前一子表达式1 次以上(至少 1 次)do+g匹配dogdoog(不匹配dg
?子表达式?匹配前一子表达式0 次或 1 次(最多 1 次)do?g匹配dgdog(不匹配doog
{m}子表达式{m}匹配前一子表达式恰好 m 次do{2}g仅匹配doog(o2 次)
{m,n}子表达式{m,n}匹配前一子表达式m-n 次(含 m 和 n)do{2,3}g匹配doog(o2 次)、dooog(o3 次)
{m,}子表达式{m,}匹配前一子表达式至少 m 次do{2,}g匹配doogdooogdoooog(o≥2 次)
{,n}子表达式{,n}匹配前一子表达式最多 n 次do{,3}g匹配dg(o0 次)、dog(o1 次)、doog(o2 次)、dooog(o3 次)

案例:以 “d” 和 “g” 之间的 “o” 为例,验证各限定符

[root@server ~ 10:04:25]# echo dg >> words 
[root@server ~ 10:22:04]# echo dog >> words 
[root@server ~ 10:22:10]# echo dooog >> words 
[root@server ~ 10:22:15]# cat words | grep 'do*g'
dog
dg
dog
dooog
[root@server ~ 10:22:28]# cat words | grep 'do?g'
[root@server ~ 10:22:35]# cat words | egrep 'do?g'
dog
dg
dog
[root@server ~ 10:22:48]# cat words | egrep 'do+g'
dog
dog
dooog
[root@server ~ 10:23:03]# cat words | egrep 'do{2}g'
[root@server ~ 10:23:29]# cat words | egrep 'do{3}g'
dooog
[root@server ~ 10:23:36]# cat words | egrep 'do{0,3}g'
dog
dg
dog
dooog
http://www.dtcms.com/a/453901.html

相关文章:

  • 青岛市黄岛区城市建设局网站网站关键词百度首页消失
  • 国外服装设计网站网销网站建设流程图
  • 牛客算法_堆栈
  • 2025-10-07打包时遇到Failed to execute script pyi rth tkinter问题
  • 磁共振成像原理(理论)21:K空间采样 (Sampling of k-Space) - k空间信号的采样要求
  • 浅谈 gRPC——以 Python 项目 secure_services_py 为例
  • 2025版基于springboot的美食食品商城系统
  • SpringBoot + PostgreSQL 密码认证失败 Windows 系统解决方案
  • 辽宁朝阳网站建设公司中国铁建门户登录
  • C# BLF 文件格式分析
  • C++基础:(八)STL简介
  • 深圳东门地铁站叫什么桂林出网站
  • 2025年--Lc169--H36.有效的数独(矩阵)--Java版
  • 网站建设工作总结培训上海对外经贸大学
  • 有什么做心理咨询的好网站网站开发与维护能做什么职业
  • 【Nest】登录鉴权
  • 托福口语【2】
  • 主主复制·(互为主从)·高可用·keepalived 故障切换演示 并且描述故障切换
  • 营销网站建设流程wordpress设置客户端缓存时间
  • 辽宁网站建设的网络科技公司中国最权威的网站排名
  • 自然语言驱动的统计图表生成:图表狐AIGC技术架构与多场景实战
  • petri网学习笔记(三)
  • 鸿蒙next 跨设备互通开发指南
  • AI-调查研究-96-具身智能 机器人场景测试全攻略:从极端环境到实时仿真
  • 陕西宏远建设集团网站可以上传图片的网站怎么做
  • 企业OCR实战:基于OCR技术实现双节差旅报销单表格解析与文字信息自动化采集
  • 网站建设管理工作经验介绍去西安需要隔离吗
  • Java Database Connectivity
  • noexcept 的微妙平衡:性能、正确性与接口契约
  • 单片机为什么不能跑Linux