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.mzph.cn/bicheng/9642.shtml

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

相关文章

2000+车企KOX账号一站式管理,打造矩阵数字化管理解决方案

车企竞争虽愈发激烈,但我们也看到,前有很会做新媒体营销的SU7上市24小时就大定88898台,后有一句“长城炮”就让长城皮卡系列火遍抖音,新媒体对当前车企抢占用户市场的重要性不言而喻。 而这之中,积极布局新媒体矩阵&am…

代码随想录算法训练营Day 39| 动态规划part02 | 62.不同路径、63. 不同路径 II

代码随想录算法训练营Day 39| 动态规划part02 | 62.不同路径、63. 不同路径 II 文章目录 代码随想录算法训练营Day 39| 动态规划part02 | 62.不同路径、63. 不同路径 II62.不同路径一、动态规划二、递归 63. 不同路径 II一、动态规划 62.不同路径 题目链接 确定dp数组以及下标…

【C++】 static成员/友元/内部类

一.static成员 声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的成员函数,称之为静态成员函数。静态成员变量一定要在类外进行初始化(不能缺省值)因为缺省…

树洞,找自己

找自己 ​ 我怀念的时光,一觉睡到大中午。外面下着阴棉的小雨,经历过几个燥热的大晴天,一场雨将近期无尽的聒噪变得静谧了起来。打开电脑玩一把红警,现在,我最不缺的就是时间。 成年之后的一切都变得急躁起来&#xf…

java使用正则表达式

这段Java代码首先定义了一个正则表达式,用于检查输入字符串formName是否符合特定格式。接下来,代码执行以下操作: Pattern pattern Pattern.compile("^1111(12|21)22[TF][0-9]{4}$");: 创建一个Pattern对象,该对象根据…

反转链表(C语言)———链表经典算法题

题目描述​​​​​​206. 反转链表 - 力扣(LeetCode): 答案展示: 迭代: 递归: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* rev…

如何设计测试用例

一、介绍 测试用例就是一个文档,描述输入、动作、或者时间和一个期望的结果,其目的是确定应用程序的某个特性是否正常的工作。 二、基本格式 用例的基本要素包括测试用例编号、测试标题、重要级别、测试输入、操作步骤、预期结果等。 用例编号&#…

C程序内存分布及static变量

C程序内存分布及static变量 C语言中程序的内存分布 [🔗1](https://www.cnblogs.com/miaoxiong/p/11021827.html)[🔗2](https://blog.csdn.net/chen1083376511/article/details/54930191)c/c编译连接后二进制文件的存储动静态存储方式和存储区动态存储方式…

一文读懂ipv4和ipv6的区别

IPv4和IPv6是互联网协议的两个主要版本,它们在多个方面存在显著的差异。以下是关于IPv4和IPv6之间区别的详细探讨: 一、地址空间 IPv4使用32位地址,理论上可以表示约42.9亿个不同的地址。然而,由于地址分配的不均衡以及网络技术的…

【更具吸引力的回答】Java中final、finally、finalize的区别(一)

在Java中,final、finally和finalize是三个容易混淆的关键字,但它们各自具有不同的作用、用途和限制。下面我将从您提到的几个方面来解释它们之间的区别: 1. final 概念与用途:final关键字在Java中用于表示“不可变性”。它可以用…

rbac和多级请假业务系统相关面试题

1.请说明你的项目及使用的技术 面试官你好!这个项目是办公自动化OA系统,我们通过这个项目来对公司内部的一系列流程性的工作进行无纸化处理,比如公司内部的请假流程就是通过这个系统逐级进行审批,我在这个系统中主要负责底层框架的搭建以及去实现请假流程这个功能,本次项目…

算法有哪些分类

算法的分类可以根据不同的标准来进行,以下是一些常见的算法分类: 基本算法分类: 搜索算法:包括线性搜索、二分搜索、哈希搜索、深度优先搜索(DFS)、广度优先搜索(BFS)等。 排序算法…

Linux下工具tc详细讲解及限制IP和端口实例

首先纠正某一篇博客,TC并不是只管发包不管收包,之前我也很纳闷 知道最后看到了14年前一位大佬的帖子。是ingress! 这里有个非常重要的点就是ingress,如果父类不是他的话是完不成限制源IP的,这个关键词表明你正在添加一个入口队列规…

设计模式——模板模式(Template)

模板模式(Template Method Pattern)是一种行为设计模式,它在一个方法中定义了一个算法的骨架,并允许子类为一个或多个步骤提供实现。模板模式使得子类可以在不改变算法结构的情况下,重新定义算法中的某些特定步骤。 主…

软件测试至关重要

软件测试在现代软件开发流程中占据着至关重要的位置,它不仅是确保软件质量的关键环节,还直接关系到用户体验、企业信誉及成本控制等多个方面。 以下是软件测试重要性的几个核心论述: 1. 提升软件质量:软件测试通过识别和报告错误…

基于springboot实现智慧图书管理系统项目【项目源码+论文说明】

基于springboot实现智慧图书管理系统演示 摘要 如今社会上各行各业,都在用属于自己专用的软件来进行工作,互联网发展到这个时候,人们已经发现离不开了互联网。互联网的发展,离不开一些新的技术,而新技术的产生往往是为…

Docker操作之启动多个相同容器实例并nginx负载均衡

文章目录 前言 一、一些概念 1.Docker 2.nginx 二、操作步骤 1.构建compose.yaml 2.nginx配置 3.Docker compose命令 4.问题与解决 总结 前言 Docker对于开发、运维人员来说都很熟悉,但是对于开发人员来说,多数时候只需一个容器实例运行即可。…

VBA_NZ系列工具NZ06:VBA创建PDF文件说明

我的教程一共九套及VBA汉英手册一部,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到数据库,到字典,到高级的网抓及类的应用。大家在学习的过程中可能会存在困惑,这么多知识点该如何组织…

python bisect 二分算法工具以及应用

python bisect 工具以及应用 主要用于在顺序固定的序列中查找以及插入 内置了四种方法 bisect_leftbisect_rightinsort_rightinsort_left bisect_left/right 方法找到应该插入元素的位置,对于和序列中元素不相同的值,两个方法返回的一样,对…

python数据处理(pandas)

# 新的数据格式,csv纯文本,使用某个字符集,比如都是ASCII、Unicode、EBCDIC或GB2312(简体中文环境)等;由记录组成(典型的是每行一条记录)每条记录被分隔符(英语&#xff…