Linux三剑客命令之grep

1. 命令介绍

当我们需要在文件中搜索特定文本时,grep 命令就派上了用场。它是全局正则表达式打印 (global regular expression print)的缩写,用于在文件中查找匹配指定模式的行,并将匹配到的行输出到标准输出。

2. 基本用法

grep [options] pattern [file...]

pattern:要搜索的模式,可以是普通字符串或正则表达式

file:要搜索的文件名。如果未提供文件名,则从标准输入读取输入。

参数

-r, --recursive:递归地搜索目录中的文件。

-n, --line-number:显示匹配行的行号。

-i, --ignore-case:忽略大小写。

-f FILE, --file=FILE:从文件或文件列表(以空格分隔)中读取模式,并用于搜索。

-v, --invert-match:显示不匹配模式的行。

-l, --files-with-matches:仅显示包含匹配模式的文件名,而不显示匹配的行。

-c, --count:仅显示匹配的行数,而不是匹配的行本身。

-w, --word-regexp:只匹配整个单词,而不是部分匹配。

-o, --only-matching:仅显示匹配的部分文本,而不是整行文本。

-E, --extended-regexp:使用扩展正则表达式进行匹配。

-F, --fixed-strings:按照字符串字面意义匹配,而不是正则表达式。

-A NUM, --after-context=NUM:显示匹配行以及后面的 NUM 行。

-B NUM, --before-context=NUM:显示匹配行以及前面的 NUM 行。

-C NUM, --context=NUM:显示匹配行以及前后各 NUM 行。

--exclude=GLOB:排除符合指定通配符模式的文件,GLOB 是一个通配符模式。

--exclude-dir=DIR:排除符合指定目录名的目录。

--include=GLOB:只搜索符合指定通配符模式的文件。

-x, --line-regexp:匹配整行,而不是匹配行中的任意部分。

-m NUM, --max-count=NUM:仅显示 NUM 行匹配结果,然后停止搜索。

--color=WHEN:对匹配的文本着色显示。WHEN 可以是 never, always, 或 auto

--binary-files=TYPE:处理二进制文件。TYPE 可以是 binary, text, 或 without-match

示例

1. 在文件中搜索包含 "error" 的行:

grep "error" file.txt

2. 在多个文件中递归搜索包含 "pattern" 的行,并显示行号:

grep -nr "pattern" directory/

3. 搜索时忽略大小写: 

grep -i "pattern" file.txt

4. 显示不匹配模式的行:

grep -v "pattern" file.txt

 5. 显示匹配的行数而不是匹配的行:

grep -c "pattern" file.txt

6. 仅显示包含匹配模式的文件名,而不显示匹配的行:

grep -l "pattern" *.txt

7. 匹配以特定字符串结尾的行:使用 $ 匹配行的结尾。

grep 'end$' file.txt

8. 使用扩展正则表达式进行匹配: 

grep -E "pattern1|pattern2" file.txt

9. 显示匹配行以及后面的 NUM 行: 

grep -A 3 "pattern" file.txt

10. 搜索一个目录下的所有文件,但不想搜索以 .log 结尾的文件:

grep -r --exclude='*.log' "text" /path/to/directory

11. 获取前两个匹配结果:

grep -m 2 "pattern" file.txt

  

3. 实际应用

分析日志

例如我需要在CentOS中查看最近的30个登录失败的IP

运行下面的命令结合tail命令从/var/log/secure日志文件中过滤出"Failed password for invalid user"的行:

grep "Failed password for invalid user" /var/log/secure | tail -n 30

再结合awk命令统计最近30个登录失败的IP及其次数

grep "Failed password for invalid user" /var/log/secure | tail -n 30 | awk '{print $13}' | sort | uniq -c | sort -nr

命令解释

这个命令是一个复杂的管道命令,用于分析 /var/log/secure 文件中最近 30 条包含 "Failed password for invalid user" 的日志条目,并统计出及其出现次数:

  1. grep "Failed password for invalid user" /var/log/secure:首先使用 grep 命令在 /var/log/secure 文件中查找包含字符串 "Failed password for invalid user" 的行。

  2. tail -n 30:然后使用 tail 命令只保留最近的 30 行匹配到的日志条目。

  3. awk '{print $13}':接着使用 awk 命令提取每行中的第 13 列,这一列通常包含登录尝试的IP。

  4. sort:对提取出来的IP进行排序,以便后续的 uniq 命令能够正确统计出现次数。

  5. uniq -c:使用 uniq 命令统计每个IP出现的次数,并添加一个前缀表示出现次数。

  6. sort -nr:最后,对统计结果按照出现次数进行逆序排序,以便显示出现次数最多的IP在最前面。

查找文本 

例如,我需要查看网站配置在哪个nginx配置文件中(配置文件名跟域名不相关的情况下),可以使用grep命令结合-nr参数查找整个nginx目录:

grep -nr domain.com /etc/nginx

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PHP基础教程

🐌博主主页:🐌​倔强的大蜗牛🐌​ 📚专栏分类:PHP 📚参考教程:菜鸟\编程网❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、PHP语法 基本的 PHP 语法 PHP 注释 PHP空白不敏…

Kafka分级存储概念(一)

Kafka分级存储及实现原理 概述 Kafka社区在3.6版本引入了一个十分重要的特性: 分级存储,本系列文章主要旨在介绍Kafka分级存储的设计理念、设计细节以及具体的代码实现 背景:为什么要有分级存储? 场景 作为一款具有高吞吐及高性能的消息中间件,Kafka被广泛应用在大数据、…

Linux添加IP地址的方法

1.nmcli:命令式的添加IP地址 [rootlocalhost ~]#nmcli connection modify eno16777736 ipv4.addresses 192.168.126.100/24 ipv4.gateway 192.168.126.1 ipv4.method manual connection.autoconnect yes [rootlocalhost ~]# nmcli connection modify eno16777736 i…

Spring Cloud Alibaba Sentinel 集成与限流实战(6)

项目的源码地址 Spring Cloud Alibaba 工程搭建(1) Spring Cloud Alibaba 工程搭建连接数据库(2) Spring Cloud Alibaba 集成 nacos 以及整合 Ribbon 与 Feign 实现负载调用(3) Spring Cloud Alibaba Ribbo…

RFID在汽车制造中的应用如何改变行业

随着工业4.0和中国制造2025的推进,企业对于智能化、自动化的需求日益增长,RFID射频技术在制造业中已经相当普遍了。在如今这瞬息万变的行业与时代中,RFID技术可以帮助企业获得竞争优势,简化日益复杂的生产流程,推动企业…

*args和**kwargs的使用

*args传入的是按照顺序的不定长度的参数列表 **kwargs传入的是不定长度的键值对

AI 资料汇总专栏

包含AI资料、大模型资料、AI最新行业发展 人工智能(Artificial Intelligence,简称AI)是一门研究如何使计算机能够具备智能行为的科学与技术。它致力于开发出能够像人类一样思考、学习、理解和决策的计算机系统。自20世纪50年代以来&#xff…

《第一行代码》第二版学习笔记(11)——最佳的UI体验

文章目录 一、Toolbar二、滑动菜单1、DrawerLayout——抽屉2、NavigationView 三、悬浮按钮和可交互提示1、FloatingActionButton——悬浮按钮2、Snackbar——提示工具3、CoordinatorLayout 四、卡片式布局1、cardView2、AppBarLayout 五、下拉刷新——SwipeRefreshLayout六、可…

栈与递归的实现

1. 栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。 栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则&#x…

教你解决PUBG绝地求生登不进去 无法进入游戏 启动很慢的问题

尽管《绝地求生》(PUBG)以它那扣人心弦的战术竞技和逼真模拟的战场氛围风靡全球,揽获无数玩家的喜爱,但一些玩家在经历了一场血脉喷张的生存较量后,却不得不面对一个不那么愉悦的后续:游戏在结算阶段后出现…

docker学习笔记(五):harbor仓库搭建与简单应用

harbor私有仓库 简介 Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的Docker Registry管…

文献速递:深度学习医学影像心脏疾病检测与诊断--基于迁移学习的生成对抗网络用于静态和动态心脏PET的衰减校正

Title 题目 Transfer learning‑based attenuation correction for static and dynamic cardiac PET using a generative adversarial network 基于迁移学习的生成对抗网络用于静态和动态心脏PET的衰减校正 01 文献速递介绍 心脏正电子发射断层扫描(PET&#xf…

JAVA入门1.1.0

前言: 不一样的编程——基于两个大前提,语言随便选一个,作者选java和c,在后续的内容会有c和java的共同使用 第一大前提:编程语言起源于语言 第二大前提:计算机理解不了语言的含义 这两大前提构成了不一样的…

Word设置代码块格式

前言 Word中无法像Markdown和LaTeX一样插入代码块,若要在Word中插入代码块可以手动设置代码块格式或自动粘贴代码块格式。若不追求完美高亮效果,可使用前者方案;若追求完美的高亮效果,可使用后者方案。下文介绍这2种方案。 手动…

渲染农场评测:6大热门云渲染平台全面比较

在3D行业中,选择一个合适的云渲染平台可能会令许多专业人士感到难以抉择。为此,我们精心准备了6家流行云渲染平台的详尽评测,旨在为您的决策过程提供实用的参考和支持。 目前,市面上主要的3D网络渲染平台包括六大服务商&#xff0…

SQL编程

用户变量的语法使用 #MySQL变量的定义与使用 #一、标识符命名规范 #1、字母加数字,但不允许使用数字开头 #2、不允许使用关键字或保留字 #3、符号只可以使用“_”或“$" #二、变量的声明 #set用于声明变量,update声明修改的表,set是声明…

OpenGL入门第三步:矩阵变换、坐标系统

1、矩阵变换 这里矩阵变换,使用4*4的矩阵,既可以表示位移,也可以表示缩放。 原因: 添加4维矩阵变量 initializeGL()函数:在着色器里面添加变换矩阵,改变坐标位置 设计一个随时间变换 ,所有重写TimerEvent 调用update触发paintGL()函数: 2、坐标系统

NSSCTF中的web学习(md5())

目录 MD5的学习 [BJDCTF 2020]easy_md5 [LitCTF 2023]Follow me and hack me [LitCTF 2023]Ping [SWPUCTF 2021 新生赛]easyupload3.0 [NSSCTF 2022 Spring Recruit]babyphp MD5的学习 md5()函数: md5($a):返回a字符串的散列值 md5($a,TRUE)&…

C#中字典Dictionary与自定义类型CustomType之间的转换

C#中字典Dictionary与自定义类型CustomType之间的转换 思路: 可以使用反射System.Reflection来获取类的具体属性, 属性名称就映射字典的键Key。 新建控制台程序DictionaryCustomClassConversionDemo 第一步、新建关键转换类ConversionUtil。 类Con…

GB2312发码测试

编码表:https://www.toolhelper.cn/Encoding/GB2312 GB2312 编码表 GB 2312 标准由中国国家标准总局 1980 年发布,GB 即国标,共收录 6763 个汉字,其中一级汉字 3755 个,二级汉字 3008 个。 GB 2312 的出现&#xff0…
最新文章