如何使用 Grep 命令在 Linux 中搜索文件

如何使用 Grep 命令在 Linux 中搜索文件

Grep 命令代表 “全局正则表达式输出” 是 Linux 中最强大和最常用的命令之一。

Grep 在一个或多个输入文件中搜索与给定模式匹配的行,并将每个匹配行写入标准输出。 如果没有指定文件,则 grep 从标准输入读取,标准输入通常是另一个命令的输出。

在本教程中,我们将通过实际示例和最常见的 GNU grep 选项的详细说明向您展示如何使用 grep 命令。

Grep命令语法

在讨论如何使用Grep命令之前,让我们先回顾一下基本语法。

Grep实用程序表达式采用以下形式:

grep [OPTIONS] PATTERN [FILE...]

方括号中的项目是可选的。

  • OPTIONS - 零个或多个选项。 Grep提供了许多控制其行为的选项。
  • PATTERN - 搜索模式。
  • FILE - 零个或多个输入文件名。

如何使用 Grep 在文件中搜索字符串

grep命令的最基本用法是在文件中搜索字符串(文本)。

例如,要显示包含字符串bash的/ etc / passwd文件中的行,可以使用以下命令:

grep bash /etc/passwd

输出应该如下所示:

root:x:0:0:root:/root:/bin/bash
pi:x:1000:1000:,,,:/home/pi:/bin/bash

如果字符串包含空格,则需要将其用单引号或双引号括起来:

grep "Gnome Display Manager" /etc/passwd

Grep反转匹配(排除)

要显示与模式不匹配的行,请使用-v(或–invert-match)选项。

例如,要显示/ etc / passwd文件中不包含字符串nologin的行,可以使用以下命令:

grep -v nologin /etc/passwd
root❌0:0:root:/root:/bin/bash
colord❌124:124::/var/lib/colord:/bin/false
git❌994:994:git daemon user:/:/usr/bin/git-shell
linux265❌1000:1000:linux265:/home/linux265:/bin/bash

如何使用 Grep 在命令输出中搜索字符串

相反,如果指定输入文件,则可以将另一个命令的输出传递给grep,然后仅显示与给定模式匹配的行。

例如,要查找作为用户www-data在系统上运行的进程,可以使用以下命令:

ps -ef | grep www-data
www-data 18247 12675  4 16:00 ?        00:00:00 php-fpm: pool www
root     18272 17714  0 16:00 pts/0    00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data
www-data 31147 12770  0 Oct22 ?        00:05:51 nginx: worker process
www-data 31148 12770  0 Oct22 ?        00:00:00 nginx: cache manager process

您还可以在命令中链接多个管道。 正如您在上面的输出中看到的那样,还有一行包含grep进程。 如果您不希望显示该行,则将输出传递给另一个grep实例,如下所示。

ps -ef | grep www-data | grep -v grep
www-data 18247 12675  4 16:00 ?        00:00:00 php-fpm: pool www
root     18272 17714  0 16:00 pts/0    00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data
www-data 31147 12770  0 Oct22 ?        00:05:51 nginx: worker process
www-data 31148 12770  0 Oct22 ?        00:00:00 nginx: cache manager process

Grep 递归搜索

要递归搜索模式,请使用 -r 选项(或 --recursive)。 这将搜索指定目录中的所有文件,跳过递归遇到的符号链接。 要遵循所有符号链接,请使用 -R 选项(或 --dereference-recursive)。

在下面的示例中,我们在 /etc 目录中的所有文件中搜索字符串linux265.com:

grep -r linux265.com /etc

该命令将打印以文件的完整路径为前缀的匹配行。

/etc/hosts:127.0.0.1 node2.linu265.com
/etc/nginx/sites-available/linux265e.com:    server_name linux265.com   www.linux265.com;

如果代替 -r 你使用 -R 选项 grep 将遵循所有符号链接:

grep -R linuxize.com /etc

注意输出的最后一行。 上面的示例中未打印该行,因为Nginx的启用站点的目录中的文件是sites-available目录中的配置文件的符号链接。

/etc/hosts:127.0.0.1 node2. linux265.com
/etc/nginx/sites-available/linux265.com:    server_name linux265.com   www linux265.com;
/etc/nginx/sites-enabled/linux265.com:    server_name linux265.com   www. linux265.com;

Grep 仅显示文件名

要禁止默认 grep 输出并仅打印包含匹配模式的文件的名称,可以使用 -l(或 --files-with-matches)选项。

例如,搜索当前工作目录中以 .conf 结尾的所有文件,并仅打印包含字符串 linux265.com 类型的文件的名称:

grep -l linux265.com *.conf

输出看起来像这样:

tmux.conf
haproxy.conf

-l 选项通常与递归选项 -R 结合使用:

grep -Rl linux265.com /tmp

Grep 例子

默认情况下,grep 命令区分大小写,这意味着大写和小写字符被视为不同。

要在搜索时忽略大小写,请使用-i选项(或 --ignore-case)。

例如,在没有任何选项的情况下搜索 Zebra 时,以下命令将不显示任何输出,即存在匹配的行。

grep Zebra /usr/share/words

但是如果使用-i选项执行不区分大小写的搜索,它将匹配大写和小写字母:

grep -i Zebra /usr/share/words

指定 “Zebra” 将匹配 “zebra” , “ZEbrA” 或该字符串的大写和小写字母的任何其他组合。

zebra
zebra's
zebras

Grep 完全匹配

当搜索 gnu grep 时,还会打印 gnu 嵌入较大单词的行,例如 cygnus 或 magnum。

 grep gnu /usr/share/words
cygnus
gnu
interregnum
lgnu9d
lignum
magnum
magnuson
sphagnum
wingnut

要仅返回指定字符串为整个单词的行(由非单词字符括起),可以使用 -w(或 --word-regexp)选项。

单词字符包括字母数字字符(a-zA-Z0-9)和下划线(_)。 所有其他字符都被视为非单词字符。

如果运行与上面相同的命令(包括-w选项),则 grep 命令将仅返回包含 gnu 作为单独单词的那些行。

grep -w gnu /usr/share/words
gnu

Grep 显示行号

要显示包含与模式匹配的 sting 的行数,请使用 -n(或 --line-number)选项。 使用此选项时,grep 会将匹配打印到标准输出,并以找到的行号为前缀。

例如,要显示 /etc/services 文件中包含前缀为匹配行号的字符串 bash 的行,可以使用以下命令:

grep -n 10000 / etc / services

下面的输出向我们显示匹配在线 10423 和 10424 上找到。

10423:ndmp 10000 / tcp
10424:ndmp 10000 / udp

Grep 匹配数

要将匹配行的计数打印到标准输出,请使用 -c(或 --count)选项。

在下面的示例中,我们计算将/usr/bin/zsh作为 shell 的帐户数。

grep  -c   '/usr/bin/zsh'   /etc/passwd

输出

4

Grep 多个字符串(模式)

OR运算符|可以连接两个或多个搜索模式。

默认情况下,Grep将模式解释为基本正则表达式,其中元字符如| 失去他们的特殊意义,必须使用他们的背面版本。

在下面的示例中,我们在 nginx 日志错误文件中搜索所有出现的单词 fatal,error 和 critical:

grep 'fatal\|error\|critical'  /var/log/nginx/error.log

如果使用扩展正则表达式选项 -E(或 --extended-regexp),则使用运算符 | 不应该逃脱,如下所示:

grep -E   'damal | error | critical'   /var/log/nginx/error.log

Grep 正则表达式

GNU Grep 有两个正则表达式功能集,Basic 和 Extended。默认情况下,Grep 将模式解释为基本正则表达式,要切换到扩展正则表达式,需要使用 -E 选项。

当在基本正则表达式模式中使用时,除元字符之外的所有其他字符实际上是与自身匹配的正则表达式。以下是最常用的元字符列表:

01、使用(插入符号)符号匹配行开头的表达式。在以下示例中,字符串 kangaroo仅在它出现在行的最开头时才匹配。

grep "^kangaroo" file.txt

02、使用 $ 符号匹配行尾的表达式。在以下示例中,字符串 kangaroo$ 仅在它出现在一行的最后才匹配。

grep "kangaroo$" file.txt

03、使用 . (点)符号以匹配任何单个字符。例如,要匹配以 kan 开头的任何内容然后有两个字符并以字符串roo 结尾,您可以使用以下模式:

grep "kan..roo" file.txt

使用 [](括号)匹配括号中的任何单个字符。例如,找到包含 acceptaccent 的行,您可以使用以下模式:

grep "acce[np]t" file.txt

使用 [^](括号)匹配括号中的任何单个字符。以下模式将匹配包含 co(any_leter_except_l)a 的任何字符串组合,例如 coca,cobalt 等,但与包含 cola 的行不匹配,

grep "co[^l]a" file.txt

要逃避下一个字符的特殊含义,请使用 \(反斜杠)符号。

Grep 扩展正则表达式

要将模式解释为扩展正则表达式,请使用 -E(或 --extended-regexp)选项。 扩展正则表达式包括所有基本元字符,以及其他元字符,以创建更复杂和强大的搜索模式。 贝娄是一些例子:

01、匹配并提取给定文件中的所有电子邮件地址:

grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" file.txt

02、匹配并提取给定文件中的所有有效 IP 地址:

grep -E -o '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' file.txt

-o 选项用于仅打印匹配的字符串。

Grep 匹配前输入出多行

要在匹配行后打印特定数量的行,请使用 -B(或 --before-context)选项。

例如,要在匹配行之前显示 5 行前导上下文,可以使用以下命令:

grep -B 5 root /etc/passwd

Grep 匹配后输入出多行

要在匹配行后打印特定数量的行,请使用 -A(或 --after-context)选项。

例如,要在匹配行后显示5行尾随上下文,可以使用以下命令:

grep -A 5 root /etc/passwd

文件内容查找:

grep -rnw 'font'

linux如何查询目录文件中是否包含某个关键字

在 Linux 系统中,可以使用 grep 命令来查询目录文件中是否包含某个关键字。

例如,如果你想查询当前目录下的所有文件中是否包含关键字 “keyword”,可以使用以下命令:

grep -r "keyword" .

在这个命令中,. 表示当前目录,-r 表示递归地搜索目录下的所有文件。

如果有任何文件包含关键字 “keyword”,则 grep 命令会输出包含该关键字的行。

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

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

相关文章

什么是过载

宇航员相关知识会涉及到过载,导弹相关知识也会涉及到过载,如导弹的过载加速度,什么是过载呢?博主从B站上看到一UP主讲的很好, 该up主视频链接: 过载是什么_哔哩哔哩_bilibili 内容截图如下:

Linux centos7离线搭建FTP

1、下载、安装ftp 下载ftp安装包,可以从rpm下载站搜索合适的版本,使用wget命令下载。 wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/vsftpd-3.0.2-28.el7.x86_64.rpm 安装: rpm -ivh vsftpd-3.0.2-28.el7.x86_64.rpm 2…

钉钉服务端API报错 43008 参数需要multipart类型

钉钉服务端API报错 43008 参数需要multipart类型 problem 使用媒体文件上传接口,按照文档输入参数,结果返回报错 # 参数 {"access_token": "xxx""type": "image","media": "/Users/xxx/xxx/s…

《QT实用小工具·二》图片文字转base64编码

1、概述 源码放在文章末尾 base64编码转换类 图片转base64字符串。base64字符串转图片。字符转base64字符串。base64字符串转字符。后期增加数据压缩。Qt6对base64编码转换进行了重写效率提升至少200%。 下面是demo演示: 项目部分代码如下所示: #ifn…

android aosp文件目录详解

目录 1.frameworks 2.packages 3.kernel 4.device 5.vendor 6.build 7.system 8.external 9.hardware 10.u-boot 11.dalvik 12.development 13.developers Android Open Source Project(AOSP)包含了 Android 平台的所有源代码。在 AOSP 中&…

探索检索增强生成和微调技术在金融服务领域的应用

引言: 在金融服务领域,随着人工智能技术的快速发展,语言模型的应用变得越来越广泛。本文将探讨检索增强生成(RAG)和微调技术在金融服务领域的应用,以及它们在不同模型大小和应用场景中的适用性。 一、检索…

FIFO控制器设计——日常学习

1 FIFO相关概念 FIFO是First in first out 的缩写,是一种先进先出的数据缓存器,它与普通存储器的区别是没有外部读写地址线。这样使用起来就非常简单,但缺点是只能顺序写入数据,顺序读出数据,其数据地址由内部读写指针…

VUE中直接播放海康威视RTSP/RTMP/ISC平台/NVR视频流

摄像头监控视频在网页中播放的工作,现在大部分摄像头厂商如海康威视、大华、华为等都支持标准的RTSP协议,RTSP协议的优势是实时性高、流畅度度高,同时支持H.265和H.264,清晰度也更高,对于要求比较高的安防、交通等领域…

Java基础知识总结(33)

获取Class对象的方式 Class.forName public class ClassForName {public static void main(String[] args) throws ClassNotFoundException {Class clazz Class.forName("java.lang.String");Class studentClass Class.forName("cn.college.reflect",f…

Python 约瑟夫环问题

据说著名历史学家 Josephus有过以下的故事:Josephus及他的朋友共41人围成一个圆圈,由第1个人开始报数,每数到3该人就必须出去,然后再由下一个人重新报数,直到圆圈上少于3人为止。Josephus 将朋友与自己安排在第16个与第…

Python抓取京东、淘宝商品数据(属性详情,sku价格抓取)

抓取京东、淘宝等电商平台的商品数据(包括属性详情、SKU价格等)通常涉及到网络爬虫技术。这些平台都有自己的反爬虫机制,因此抓取数据需要谨慎操作,避免对平台造成不必要的负担或违反其使用条款。 公共参数 名称类型必须描述key…

12-Factor应用方法论

12-Factor应用方法论是由Heroku的创始人Adam Wiggins提出的,旨在指导开发者构建应用以适应现代云平台,实现高的可移植性、伸缩性和可维护性。这个方法论特别适合设计和开发软件即服务(SaaS)应用。 以下是12-Factor应用方法论的详…

【数据结构】AVL 树

文章目录 1. AVL 树的概念2. AVL 树节点的定义3. AVL 树的插入4. AVL 树的旋转5. AVL 树的验证6. AVL 树的删除7. AVL 树的性能 前面对 map / multimap / set / multiset 进行了简单的介绍【C】map & set,在其文档介绍中发现,这几个容器有个共同点是…

汽车电子行业知识:什么是数字钥匙?

文章目录 1. 什么是数字钥匙?2. 数字钥匙有哪些类型?3. 汽车数字钥匙4. 数字钥匙包含哪些技术5. 汽车数字钥匙的发展趋势 1. 什么是数字钥匙? 数字钥匙通常指的是一种安全工具,它使用数字代码或密码来授权对特定系统或服务的访问。…

【御控物联】JavaScript JSON结构转换(13):对象To数组——多层属性重组

文章目录 一、JSON结构转换是什么?二、案例之《JSON对象 To JSON数组》三、代码实现四、在线转换工具五、技术资料 一、JSON结构转换是什么? JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换,生成新的JS…

Samba服务安装以及小米摄像头同步

Samba服务安装以及小米摄像头同步 安装Samba添加samba用户创建共享文件夹配置文件修改启动并配置开机启动防火墙以及端口修改小米摄像头同步常见问题1.找不到nas存储设备2.同步只能创建文件夹,不同步数据 安装Samba sudo yum install samba添加samba用户 #如果要添…

用 ipset 和 iptables 保护 sip 端口

这里假设 sip 端口是 5060 和 5080 cat china.sh,and ./china.sh #!/bin/bash apt install -y ipset ipset destroy china ipset create china hash:net maxelem 65536 ipset flush china wget --no-check-certificate -O- http://ftp.apnic.net/apnic/stats/apnic…

火鸟门户拖拽专题可视拖拽面板快速创建网站,无需懂代码,形式灵活,功能强大

可视化拖拉面板简介 可视化拖拽面板是一种消耗代码即可创建网站的工具。它提供了一个分析的界面,用户可以通过拖拽预先设计的组件来构建页面。这种方式可以大大降低网站开发的效率,让不懂代码的人也能轻松创建自己的网站。 可视化拖拉面板的优势 可视…

「51媒体网」媒体邀约现场采访的优势有哪些?

传媒如春雨,润物细无声的,大家好,我是51媒体网胡老师。 媒体邀约现场采访的优势主要表现在以下几个方面: 实时报道与传播:现场采访能够让媒体了解活动的真实性,此外,到场报道媒体可以实时迅速将…

文献学习-25-综合学习和适应性教学:用于病理性胶质瘤分级的多模态知识蒸馏

Comprehensive learning and adaptive teaching: Distilling multi-modal knowledge for pathological glioma grading Authors: Xiaohan Xing , Meilu Zhu , Zhen Chen , Yixuan Yuan Source: Medical Image Analysis 91 (2024) 102990 Key words: 知识蒸馏、模态缺失、胶质瘤…