三剑客之 grep

news2025/7/7 11:06:34

目录

  • 基本参数
  • 正则表达式

本文参考文献:

GNU Grep 3.8

grep 是一个在 UNIX 上的命令行工具,它通过给定的模式(pattern)来搜索一个输入文件,并输出匹配到这些模式的内容

grep 于1974年公开,是文本三剑客中最早出生的(另外两个是 sed、awk),由 Ken Thompson 创造(UNIX 之父)

grep 基本就是玩正则匹配,一般会玩 grep 的人,正则表达式都比较强

今天这篇文章主要目的还是为了引起大家对 grep 的兴趣,对于这个上古神器还需要大家自行去查阅相关文档去进一步学习

废话少说,开始今天的 grep 学习之旅吧!

grep 基本格式

grep <选项> <pattern> 文件或目录

grep 选项:

-E:支持扩展正则表达式
-i:忽略大小写
-n:将行号打印出来
-o:只输出匹配内容
-c:只输出匹配内容的行数
-B:输出匹配内容的前n行
-A:输出匹配内容的后n行
-C:输出匹配内容的前后n行
-v:输出不匹配的行(取反操作)
-e:多个操作,例如:grep -e ’A‘ -e 'B'

基本参数

下面的文本内容作为演示案例

passwd.txt

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

chrony:x:998:996::/var/lib/chrony:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin


ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
zabbix:x:997:995:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
#minion2:x:1000:1000::/home/admin:/bin/bash
#nginx:x:996:994:Nginx web server:/var/lib/nginx:/sbin/nologin
  • -E 支持扩展正则表达式

可以看到这个文本里面有空行,也有 # 开头的注释

1、将过滤掉空行的内容输出出来

grep -E -v '^$' passwd.txt 

其中,-E 是指支持扩展正则表达式;-v 是指将非空行的内容打印出来;‘^$’ 则表示空行

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
zabbix:x:997:995:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
#minion2:x:1000:1000::/home/admin:/bin/bash
#nginx:x:996:994:Nginx web server:/var/lib/nginx:/sbin/nologin

2、将过滤掉注释的内容输出出来

grep -E -v '^#' passwd.txt

其中 ‘^#’ 指以 # 开头,也就是注释

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

chrony:x:998:996::/var/lib/chrony:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin


ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
zabbix:x:997:995:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
  • -i:忽略大小写

1、将 sys 过滤出来(不忽略大小写)

grep  'sys' passwd.txt 
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin

2、将 sys 过滤出来(忽略大小写)

grep  -i 'sys' passwd.txt
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
zabbix:x:997:995:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
  • -n:将行号打印出来
grep  -n 'sys' passwd.txt
14:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
  • -o:只输出匹配内容

1、匹配 root (不加 -o)

grep 'root' passwd.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

2、匹配 root (加 -o)

grep -o 'root' passwd.txt
root
root
root
root
  • -c:只输出匹配内容的行数
grep -c 'root' passwd.txt
2
  • -B:输出匹配内容的前n行

1、匹配 ‘daemon’,并输出其前两行

grep -B 2 'daemon' passwd.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
--

chrony:x:998:996::/var/lib/chrony:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
  • -A:输出匹配内容的后n行

1、匹配 ‘root’,并输出其后两行

grep -A 2 'root' passwd.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
  • -C:输出匹配内容的前后n行
grep -C 2 'root' passwd.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
  • -v:输出不匹配的行(取反操作)

1、过滤掉 ‘root’

grep -v 'root' passwd.txt
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

chrony:x:998:996::/var/lib/chrony:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin


ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
zabbix:x:997:995:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
#minion2:x:1000:1000::/home/admin:/bin/bash
#nginx:x:996:994:Nginx web server:/var/lib/nginx:/sbin/nologin
  • -e:多个操作

1、将匹配到 ‘root’ 和 ‘daemon’ 打印出来

 grep -e 'root' -e 'daemon' passwd.txt 
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

或者可以使用扩展正则式

grep -E 'root|daemon' passwd.txt

正则表达式

通过使用正则表达式可以进一步扩展 grep 的功能,妥妥的生产利器

下面给出一些常用的正则表达式

在这里插入图片描述

还是以 passwd.txt 作为案例

  • *:匹配前面的字符 0 次或者多次

1、匹配 ‘ro’

grep -E 'ro*' passwd.txt

可以匹配 ‘r’ 、‘ro’ 、‘roo’

在这里插入图片描述
2、匹配 ‘roo’

grep -E 'roo*' passwd.txt

在这里插入图片描述

3、如果我们要匹配 root ,但是你不知道具体单词,只知道前后,你可以这样

grep -E 'r*t' passwd.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
  • ^:匹配以某个字符开头的行

1、匹配以 sy 开头的行

grep -E '^sy' passwd.txt
sync:x:5:0:sync:/sbin:/bin/sync
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin

2、匹配注释(以 # 开头)

grep -E '^#' passwd.txt
#minion2:x:1000:1000::/home/admin:/bin/bash
#nginx:x:996:994:Nginx web server:/var/lib/nginx:/sbin/nologin
  • $:匹配以什么字符结尾的行

1、匹配以 t 结尾的行(是看行尾,不是字符串尾)

grep -E 't$' passwd.txt
halt:x:7:0:halt:/sbin:/sbin/halt

2、匹配以空白开头,空白结尾的行(其实就是空行)

grep -E '^$' passwd.txt
  • .*:匹配任意长度的任意字符

1、匹配包含 ‘no’ 的任意字符

grep -E 'no.*' passwd.txt

在这里插入图片描述

2、过滤出当前目录下 包含 ‘.txt’ 的文件

ll | grep -E '*.txt'
-rw-r--r--  1 root root  1198 11月 15 11:07 passwd.txt
-rw-r--r--  1 root root  1598 11月 15 10:12 test.txt
  • [ ]:匹配括号内的字符

1、匹配 ‘oot’ 、‘rot’

grep -E '[ro]ot' passwd.txt

2、匹配 ‘rt’ 、‘ot’

grep -E '[roo]t' passwd.txt
  • [^]:不匹配括号内的字符(取反操作)

1、匹配到 ‘rt’ 、‘ot’,然后取反(就是取反输出)

grep -E '[^roo]t' passwd.txt

在这里插入图片描述

  • <:锚定单词首部

记得加上 ’ \ ’ 转义符

1、匹配出 ‘ro’(以 ro 开头的单词)

 grep -E '\<ro' passwd.txt

PS:加上尾部锚定符的话是匹配不出来的,因为文本里没有 ro 这个单词

grep -E '\<ro\>' passwd.txt
  • >:锚定 单词尾部

1、匹配 ‘ot’ 结尾的单词

grep -E 'ot\>' passwd.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

PS:加上首部锚定符的话是匹配不出来的,因为没有 ot 这个单词

grep -E '\<ot\>' passwd.txt
  • {m,n}:表示匹配前面的字符出现至少m次,至多n次

1、匹配 ‘o’ ‘oo’

grep -E 'o{1,2}' passwd.txt

PS:例子中的正则表示 o 最少是一个,最多是两个(oo)

在这里插入图片描述

2、匹配 ‘aa’,‘aaa’或’aaaa’

grep -E 'a{2,4}' passwd.txt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/9359.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ROS总结理解

机器人操作系统入门_中科院软件所-重德智能机器人联合研究中心_中国大学MOOC(慕课) 可以参考视频学习 目录 .1ROS版本 .2 ROS架构 .3 ROS与IDE安装 .4 Catkin与工作空间 5.ROS的Package结构 6.ROS的常用指令 7.Metapackage 8.Master和Node .9 Topic和msg .10 Servic…

css 改变下划线长度,伪元素模拟border-bottom

要实现文字下方下划线 1 border-bottom配合width <html><head><style>p {border-bottom: 1px solid red;}</style> </head><body><p>选中内容</p> </body></html>直接设置border-bottom&#xff0c;会由于p标签…

vue3使用element-plus

1、下载包 npm install element-plus --save 2、引入 全局引入挂载&#xff1a;引入记得有css文件&#xff08;下载不下来可能是项目正在运行&#xff0c;先关掉&#xff09; import { createApp } from vue import App from ./App.vue import ElementPlus from element-plus …

MySQL 主从复制

现在我们的应用基本都往高性能的方向发展&#xff0c;各种语言都开始推出一些多进程和分布式的框架&#xff0c;其目的就是为了能够做到一个高性能的应用。包括会使用各种MQ和缓存的中间件&#xff0c;其实使用这些中间件的最终目的都是为了能够缓解数据库的压力&#xff0c;数…

下载离线地图地形数据库(3D离线地图开发)

下载离线地图地形数据库&#xff08;3D离线地图开发&#xff09; 发布时间&#xff1a;2020-03-03 版权&#xff1a; 离线地形&#xff1a;是用来表示地表高低起伏的一种三维地形数据库&#xff0c;有了这个地形数据&#xff0c;才能真实的反应出地球表面的高低起伏状态&#…

Docker安装Nginx并修改Nginx配置文件

一、Docker安装Nginx 1、首先在虚拟机上要确保你已经启动了docker。 2、其次登录DockerHub官网&#xff0c;然后搜索nginx&#xff0c;,然后在虚拟机里面输入docker pull nginx,就可以下载nginx的镜像了。 3、注意下载完以后要使用docker images指令查看一下是否下载成功了&am…

市场调查与分析[市场调查员][抽样技术方案][抽样方法][F检验]

正大杯比赛最新参考题&#xff08;预测含必考&#xff09; - 知乎 目录 A市场调查员 B抽样技术方案 一、调查目的、范围、对象及内容 二、抽样方案设计的原则与特点 三、样本区、县的选取 3.1全国区、县的调查总体 3.2区、县分层 (1)地域 (2)区、县类别 四、各阶…

怎么复习信息系统项目管理师?

废话不多说~ 正文开始~ 一、备考前期准备 1、合理规划时间&#xff0c;把握备考节奏 大家在网上经常会看到&#xff0c;考软考高级很简单&#xff0c;说是1个月就可以。 确实现实中存在大神&#xff0c;况且运气还占据一定比例&#xff0c;人家能上&#xff0c;咱真的不一…

鼎医信息加入PolarDB开源数据库社区

近日&#xff0c;上海鼎医信息技术有限公司签署阿里巴巴开源CLA(Contribution License Agreement, 贡献许可协议), 正式与阿里云PolarDB 开源数据库社区牵手。 过去 5 年&#xff0c;阿里云针对 PolarDB 进行了诸多创新&#xff0c;通过采用存储计算分离、软硬一体化设计&#…

SREWorks v1.3 版本发布 | 插件机制发布

在v1.2版本发布之后&#xff0c;SREWorks团队着手开始了v1.3版本的迭代。此次v1.3版本融合了较多用户需求&#xff0c;以及对底座机制进行了较大调整和优化&#xff0c;故发版时间长了很多。下面让我们切入正题&#xff0c;来看看这些大变化究竟是哪些&#xff1f; 1. 插件机制…

Web3——开发第一个智能合约

学习写第一个智能合约&#xff0c;下面连接是集成开发环境 https://github.com/smartcontractkit/full-blockchain-solidity-course-js#lesson-2-welcome-to-remix-simple-storage 点击 “Remix” 来到Remix IDE&#xff0c;这就是我们要写代码的地方&#xff0c;集成开发环境…

一文入门mybatis-plus

mybatis-plus mybatis-plus官网 MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生. 可以说呢&#xff0c;在MP基础上还可…

一次想不到的 Bootstrap 类加载器带来的 Native 内存泄露分析

最近我们线上有同学反馈&#xff0c;java 服务在接入了支持预发的 javaagent 以后会出现缓存的内存增长&#xff0c;去掉 agent 启动以后内存增长正常。于是分析了一下这个问题&#xff0c;写了这篇文章。 备注&#xff1a;JVM 堆内存最大 1000M 主要会涉及下面这些内容&#…

防火墙基础技术

目录 一、内容概述 二、防火墙概述 防火墙的应用 防火墙的本质 防火墙的发展历程 防火墙特征 防火墙分类 包过滤防火墙&#xff1a; 包过滤防火墙的缺点&#xff1a; 代理防火墙&#xff1a; 代理防火墙的缺点&#xff1a; 状态检测防火墙&#xff1a; 状态检测防火…

【Linux修炼手册:基本指令(下)】

目录 1 man指令&#xff08;重要&#xff09; 2 more指令 3 less指令&#xff08;重要&#xff09; 4 head指令和tail指令 5 时间相关的指令 6 Cal指令 7 find指令&#xff1a;&#xff08;灰常重要&#xff09; -name 8 grep指令 9 zip/unzip指令 10 其他常见命令 1…

SiPM使用总结

1、SiPM的电子模型 首先我们来看一下二极管的雪崩电子模型&#xff0c;电子模型和雪崩时的电流波形如下图所示&#xff0c; 电流上升的快慢是由电容的充放电速度决定的&#xff0c;充电的时常数TdRS*Cd&#xff0c;放电的时常数 TqRq*Cd&#xff0c;这里Rq>>Rs&#xf…

《Hidden Markov Map Matching Through Noise and Sparseness》读书笔记

摘要 Our test shows how the algorithm breaks down as the sampling rate of the GPS is reduced. We also test the effect of increasing amounts of additional measurement noise in order to assess how well our algorithm could deal with the inaccuracies of other…

甘露糖修饰阿奇霉素|mannose-Azithromycin|甘露糖-聚乙二醇-阿奇霉素

甘露糖修饰阿奇霉素|mannose-Azithromycin|甘露糖-聚乙二醇-阿奇霉素 甘露糖修饰阿奇霉素&#xff0c;溶于大部分有机溶剂&#xff0c;如&#xff1a;DCM、DMF、DMSO、THF等等。在水中有很好的溶解性&#xff0c;取用一定要干燥&#xff0c;避免频繁的溶解和冻&#xff0c;提供…

2022年11月华南师范大学自考本科计算机信息管理系统加考实践题目

《 管理信息系统 》课程试卷 答卷提交说明&#xff1a; 在access环境下填写SQL命令完成以下实践的题目&#xff0c;并返回执行结果的截图&#xff0c;答卷的答题格式如下&#xff0c;包括三部分&#xff1a;题目&#xff0c;SQL文本代码&#xff0c;代码运行截图&#xf…

负载均衡架构

整体架构 设计关键点 4级负载架构 3级负载架构 2级负载架构 技术剖析 DNS 应用 地理位置和机房级别的负载均衡 优点 标准协议 缺点 能力有限&#xff0c;不够灵活DNS劫持DNS缓存 HTTP-DNS 应用场景 App、客户端 优缺点 可以根据业务和团队技术灵活定制非标协议、不通…