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

Linux文本编辑三剑客之grep

Linux 文本编辑三剑客之 grep

Linux 文本处理三剑客是面试和后端工作中较为常见的。需要掌握:

  • grep:文本过滤、筛选
  • sed:文本编辑加工
  • awk:文本格式化输出

画板

本节内容基于正则表达式:

正则表达式

借助正则表达式可以快速匹配、过滤需要的字符串,在 Linux 上处理大量文本比较高效。

  • 一次处理一行
  • Linux 上只有文本处理工具三剑客(grep、sed、awk)常用,编程语言都有对应支持
  • 扩展正则是基本正则的补充,一般结合三剑客使用建议直接使用扩展正则的写法,简洁

基本正则

符号 作用
^ 模式匹配最左侧,^abc就是以abc开头
$ 模式匹配最右侧,abc$就是以abc结尾
^$ 组合符。空行
. 任意一个且只有一个字符,不匹配空行
* 匹配前一个字符0或多次,不单独使用
.* 组合符。匹配任意多个字符
^.* 组合符。匹配任意多个字符开头
.*$ 组合符。匹配任意多个字符结尾
\ 特殊字符还原本意,\.是小数点
[abc] 匹配集合内任意字符
[^abc] 匹配集合之外的字符
<> 定位单词的左侧和右侧。<deltaqin> 可以找出 deltaqin nb找不出deltaqinnb

扩展正则

符号 作用
+ 匹配前面字符一次或多次
[:@]+ 组合符。匹配[]内的字符一次或多次
? 匹配前面字符0次或1次
` `
() 分组过滤,括号内是一个整体
a{m,n} 前面的字符最少m最多n次
a{m,} 前面的字符最少m次
a{m} 前面的字符m次
a{,m} 前面的字符最多m次

具体使用还是要结合三剑客一起

Why grep

文本搜索工具,根据指定的过滤条件对文本逐行匹配

What grep

grep [option] [pattern] file
  • option:可选参数
    • -i 忽略ignore大小写
    • -v 显示不能被匹配的行
    • -E 使用正则表达式匹配
    • -n 显示行号
    • -c 统计匹配的行数
    • -o 只显示被匹配的关键字,一般用来计数
  • pattern:可以是普通文本字符,也可以是正则表达式

How grep--基本正则

i 开头的行

1653206849763-94a6cd25-e46c-44bb-a0fc-27e2471a5e9e.png

1653206882286-e14aa915-9bbf-4f0e-95bc-2c98ea4efb36.png

n 结尾的行

1653206943761-9db1418d-aa6e-41cd-8b0f-b9cf2b57f9ba.png

以特殊符号结尾的行

1653207096255-252050f3-77d3-466d-931c-b88c561c52e5.png

1653207121340-06956ffa-b89b-4ce7-99fb-a54e9daf0644.png

空行

1653207204921-3e05041f-aa78-4b2f-93a8-d21af29968fb.png

贪婪匹配

1653207451740-34d9e9ec-88c0-4eac-b8db-77fc13246b0f.png

匹配数字或者字符

1653207510033-1d936ffe-be16-4436-a0e9-710740502aaf.png

1653207548141-b5335045-fdbe-4889-a1b2-4d39564b6bd0.png

匹配小写之外的字符

1653207790987-8513a7ac-843b-4dd1-9487-6d8fed86b674.png

How grep--扩展正则

匹配1个或多个

1653208053744-ae91f2eb-dc49-4ede-a76e-977dfd0fb070.png

匹配0或1次

1653208082525-2a9002aa-0584-463d-80cf-8d50da5293cd.png

匹配自定义次

1653209729758-4a986089-2aac-480e-961e-c1cb36006df6.png

1653209712669-475972ac-3851-49f8-93d1-cae4b635ea77.png

匹配或

1653208121593-ee01f2a9-3d7e-470d-bc6e-c8e47b851b66.png

分组

  • 括号的内容当做整体来匹配

1653208394960-76061f60-03ee-41dc-bc2b-279cb53caa1b.png

分组与引用找出用户名和shell名相同的行

  • 括号的内容可以被引用
    • \1 是第一个括号中匹配的字符
    • \2是第二个括号中匹配的字符

1653208552866-bb438000-4892-4899-a6a5-a4aa240524d5.png

1653208851513-2260c140-4d25-4edd-8beb-23f372f937cf.png

^([^:]+).*\1$其中\>代表单词结尾

  • [^:]+ 冒号外的多个字符
  • ^[^:]+冒号外的多个字符开头的行
  • ^([^:]+\>) 冒号外的多个字符开头的行,并且匹配一个完整的单词
  • \1$ 结尾是前面括号的内容,这里就是用户名

常见使用案例

过滤root或者de开头的行,不区分大小写,并显示行号

1653221592428-a4227407-f4e2-49c9-af38-291171e2fede.png

精确过滤root或者deltaqi开头的行

1653221649226-877c31a2-a8a2-4133-aa6c-37107d826aeb.png

列出不以nologin结尾的行

1653221786745-22996165-d116-4d5d-b2e8-f91258dbbcbe.png

找到两位数或者三位数

错误写法,没有精确匹配

1653221943682-a707fe71-83bf-4244-8ce3-589530c29a84.png

1653221986777-004e85fc-bed3-442f-8388-d5787dc83c5c.png

至少一个空格开头,后面全是非空字符的行

1653222154790-b774f7be-ad57-4b70-a676-51790cc52d0d.png

1653222227201-dddfe114-ecff-49be-a2be-becb779b1640.png

找出文件所有的函数名

1653222335837-cec3a054-4dfa-4ee0-9d24-cdd202964fd4.png

http://www.hskmm.com/?act=detail&tid=29537

相关文章:

  • Linux文本编辑三剑客之sed
  • 做了项目经理才发现:上台发言,其实都有套路
  • 占位符
  • 什么是IO多路复用?
  • 进程、线程和协程之间的区别和联系
  • 挣点小钱的副业(附带新手教程)0元的快乐
  • Linux文本编辑三剑客之awk
  • 软考~高效的系统规划与管理师考试—知识篇—V2.0—第四章 IT 服务规划设计 — 2017 年 2018 年 2020 年 2022 年 2023 年
  • 10.12
  • 从“优化工具”到“价值生态”:多价值主体系统如何重塑AI价值对齐范式
  • 2.2 深度学习(Deep Learning)
  • 结对项目
  • 第十二篇
  • 2.1 函数逼近(Function Approximation)
  • Elasticsearch 备份:snapshot 镜像使用篇
  • 本次科研收获
  • 2025.10.12 - 20243867孙堃2405
  • git clone 克隆下载深度层级仓库最新源码而不是整个仓库
  • 九、可供选择的体系结构
  • Linux查看一个文件的时候发生了什么?
  • 内存管理
  • 2025 年 10 月金属门窗厂家加盟代理品牌推荐排行榜,行业权威盘点与品质红榜发布
  • 五、指令集架构深入分析
  • ARC 208 Div.2
  • 八、系统软件
  • 七、输入输出和存储系统
  • 那快把题端上来吧(五)
  • 机器学习学术研讨会柏林举办
  • 构建易受攻击的AWS DevOps环境:CloudGoat攻防实战
  • 虚拟机和windows