一看就懂-grep命令详解

article/2025/6/25 12:30:19

转载自:https://www.zsythink.net/archives/1733
如果你是一个新手,请从头阅读这篇文章,如果你只是忘记了grep命令的一些常用选项,直接查看文章尾部的总结部分即可。

先说说grep命令能做什么?

我们可以使用grep命令在文本中查找指定的字符串,就像你在windows中打开txt文件,使用快捷键 “Ctrl+F” 在文本中查找某个字符串一样,说白了,可以把grep理解成字符查找工具。

grep是Linux中最常用的”文本处理工具”之一,grep与sed、awk合称为Linux中的三剑客。

grep的全称为: Global search Regular Expression and Print out the line

全称中的”Global search”为全局搜索之意。

全称中的”Regular Expression”表示正则表达式。

所以,从grep的全称中可以了解到,grep是一个可以利用”正则表达式”进行”全局搜索”的工具,grep会在文本文件中按照指定的正则进行全局搜索,并将搜索出的行打印出来。

当然,不使用正则表达式时也可以使用grep,但是当grep与正则表达式结合在一起时,威力更强大。

我们先来看一个最简单的使用示例,从最简单的示例开始认识grep。

为了实验方便,我们先准备一个测试文件,文件名为testgrep,文件内容如下。
在这里插入图片描述
假设,现在我们想要从testgrep文本文件中搜索包含”test”字符串的行,则可以使用如下命令
在这里插入图片描述
上图中的命令表示使用grep命令,在testgrep文件中搜索包含”test”字符串的行,并将包含test字符串的行打印出来。

于是,testgrep文件中的第一行被打印了出来,默认情况下,grep是区分大小写的,所以,文件中包含大写”TEST”的行没有被打印出来。

grep的使用是不是很简单,我们继续聊。

如果我们想要在搜索字符串的时候,不区分大小写,应该怎样做呢?grep很贴心,为我们准备了一个选项,使用”-i”选项,即可在搜索时不区分大小写,示例如下:
在这里插入图片描述
如上图所示,在不区分大小写的情况下,由于testgrep文本中的第一行与第五行中都包含”test”,所以,这两行都被打印了出来。

由于testgrep文本中的内容不较少、行比较少,所以,我们能数过来,是第一行与第五行包含”test”字符,如果文本中有1000行,我们还想要知道哪行文本包含”test”字符串,则可以使用”-n”选项,表示显示打印出的行在文本中的行号,示例如下。
在这里插入图片描述
如上图所示,grep不仅将符合条件的行输出了,同时还显示了行号,证明testgrep文本中的第1行与第5行,在不区分大小写的情况下,都包含字符串”test”。

在centos6中,我们使用grep在文本中搜索出的行虽然会被打印了出来,但是在打印这些行时,被匹配到的关键字没有高亮显示,如果我们想要高亮显示行中的关键字,该怎么办呢?我们可以使用”–color”选项,高亮显示行中的关键字,示例如下

注:”–color选项”是长选项
在这里插入图片描述
使用”–color”与使用”–color=auto”的效果相同,都表示高亮显示关键字,我比较懒,习惯使用”–color”。

在centos7中,系统默认为grep命令配置了别名,所以在centos7中使用grep命令时,不用显式的指定”–color”选项,默认就会高亮显示被匹配到的关键字,在centos7中使用alias命令,即可查看到grep命令的别名,如下
在这里插入图片描述
可以看到,centos7中为grep命令配置的别名中,默认包含了–color选项,所以,不用显示指定,也可高亮显示。

所以,我们也可以在centos6中借鉴这种方法。
在这里插入图片描述
上图中,testgrep文本中一共有两行包含”test”字符串,如果我们只想知道有多少行包含指定的字符串,而不在乎哪些行包含这些字符串,我们可以使用如下命令,获取到符合条件的总行数。
在这里插入图片描述
没错,使用”-c”选项即可只统计符合条件的总行数,而不会打印出行。

之前的示例中,包含关键词的行都会被打印出来,整行都会被打印出来,如果我们只想看被匹配到的关键字,不想整行都被打印出来,可以吗?必须的,使用”-o”选项即可只打印出匹配到的关机字,而不打印出整行,示例如下。
在这里插入图片描述
如上图所示,使用”-o”选项,可以只显示被匹配到的关键字,而不是讲整行的内容都输出。

但是需要注意,”-o”选项会把每个匹配到的关键字都单独显示在一行中进行输出,什么意思呢?看如下示例即可明白。
在这里插入图片描述

如上图所示,当没有使用”-o”选项时,包含”123″字符串的行都会被打印出来,当同一行中包含多个”123″时,所在行会被打印出来,对应的关键字也会高亮显示,当使用了”-o”选项时,每个被匹配到的关键字都会被单独打印在一行中,如上图所示,第三个”123″与第四个”123″都属于第10行的文本,但是它们仍然各自独占一行的输出了。

其实,我们在使用grep命令搜索文本时,往往有这种需求:在找到对应的关键字时,同时需要显示关键字附近的信息,什么意思呢?

我们来看一个场景,就能明白,我们新建了一个测试文件:testgrep1,测试文件内容如下

在这里插入图片描述

假设,我们想从testgrep1文件中找出”年龄为18″的人,我们该怎么找呢?你可能会尝试使用如下命令。

在这里插入图片描述

如上图所示,我们是匹配到了”年龄:18″的行,但是我们并不能从结果中得知年龄为18的人的姓名,因为姓名与年龄并不在一行中,那么我们该怎么办呢?

我们可以使用”-B”选项,显示符合条件的行之前的行,”B”有before之意,示例如下
在这里插入图片描述

如上图所示,包含字符串”年龄:18″的行被高亮输出了,同时,符合条件的行”之前的一行”也被打印了出来,这时,我们就能从结果中得知,朱双印今年18岁,王尼美今年18岁。

没错,上例中的”-B1″选项表示显示符合条件的行的同时还显示之前的1行,举一反三,”-B5″代表同时显示之前的5行,”-B3″代表同时显示之前的3行,”-B”选项的后面必须有数字,否则会报错。

与”-B”选项对应的选项是”-A”选项,”-B”有Before之意,”-A”有After之意,聪明如你,一定已经猜到了”-A”的含义,没错,”-A”代表显示符合条件的行的同时,还要显示之后的行,”-A3″表示同时显示符合条件的行之后的3行,我就不再赘述了。

说了”-A”,说了”-B”,现在说说”-C”,”-C”选项可以理解为”-A与-B”的结合,”-C”选项表示在显示符合条件的行的同时,也会显示其前后的行,如”-C1″,”-C1″表示打印符合条件的行的同时,也打印出之前的一行与之后的一行,”-C”有Context之意(上下文之意),示例如下。
在这里插入图片描述

这样我们就能看到”年龄是18岁”的人的所有信息了。

有的时候,我们往往需要进行所谓的”精确匹配”,但是使用之前的方法似乎无法满足我们,示例如下。
在这里插入图片描述

上图中,当我们在文本中搜索”zsy”字符串的时候,”zsy”、”zsythink”、”123zsy123″所在的行都被匹配到了,因为”zsythink”中也包含了”zsy”,所以也被匹配到了,但是当我们想要”精确匹配”zsy字符串的时候,按照上例中的方法就无法做到了,所谓的精确匹配,就是”zsy”作为一个独立的单词存在,而不是包含于某个字符串中,那么,如果有这种需求,我们怎么办呢?使用”-w”选项可以实现我们的需求,示例如下。

在这里插入图片描述

如上图所示,只有”zsy”作为一个独立的单词存在的时候,才会被匹配到,”zsy”包含于某个字符串的时候,则不会被匹配到,这就是所谓的精确匹配,”-w”有word之意,表示搜索的字符串作为一个独立的单词时才会被匹配到。

有的时候,我们需要反向查找,比如,查找”不包含某个字符串”的行,这个时候,我们需要用到”-v”选项,示例如下。

在这里插入图片描述

上例表示查找出文本中不包含”zsy”字符串的行。

某些场景下,我们可能想要同时从多个目标中匹配,什么意思呢?看了示例就秒懂,示例如下。

在这里插入图片描述

上例中,我们同时在文本中搜索了”abc”字符串与”test”字符串,包含这两个字符串中任意一个的行都会被打印出来,没错,就像上图中的示例一样,使用”-e”选项可以同时匹配多个目标,多个目标之间存在”或”关系,即匹配其中的任意一个都算作匹配成功。

在写脚本时,你可能只是想要利用grep判断文本中是否存在某个字符串,你只关心有没有匹配到,而不关心匹配到的内容,你只关心有,或者没有,这时,我们可以使用grep的静默模式,示例如下。
在这里插入图片描述

当使用”-q”选项时,表示grep使用静默模式,静默模式下grep不会输入任何信息,无论是否匹配到指定的字符串,都不会输出任何信息,所以,我们需要配合”echo $?”命令,查看命令的执行状态,如果返回值为0,证明上一条grep命令匹配到了指定的字符串,如果返回值为1,则证明上一条grep命令没有匹配到指定的字符串,就像上图示例中显示的那样,静默模式下,grep没有输出任何信息,当我们在testgrep文本中查找”test”字符串时,可以匹配到结果,当在文本中查找”ttttttttttttt”字符串的时候,没有匹配到结果,所以,我们只关心有没有匹配到指定字符时,可以使用”-q”选项,但是需要配合”echo $?”命令查看执行状态。

注:如果你对正则表达式还不熟悉,可以先跳过下面的示例,本博客中会对”正则表达式”进行详细总结。

正则表达式系列文章直达链接:正则表达式详解

文章开头说了,grep可以利用正则表达式进行搜索,但是之前的举例中,grep都没有使用正则表达式,只是纯粹的去查找一些字符串,这次,我们使用grep命令,配合正则表达式,来查找我们想要的目标。

比如,我们想要查找某个文本中的合法邮箱,示例如下
在这里插入图片描述

眼尖的你肯定发现了,上图中的正则表达式为扩展正则表达式,而不是基础正则表达式,所以,在上述命令中,我使用了”-E”选项。

在使用”-E”选项时,grep才支持”扩展正则表达式”,不使用”-E”选项时,grep默认只支持”基本正则表达式”。

不同的开发语言中,正则表达式的规则可能略有不同,我们在使用grep时,可以使用”-P”选项,指明使用perl兼容的正则表达式。

示例如下:

在这里插入图片描述

好了,grep的常用选项我们已经总结完毕,剩下需要做的就是不断的练习了。

其实,除了grep命令,其实还有egrep命令,还有fgrep命令(fast grep),它们有各自的特点。

grep:支持基本正则表达式

egrep:支持扩展正则表达式,相当于grep -E

fgrep:不支持正则表达式,只能匹配写死的字符串,但是速度奇快,效率高,fastgrep

总结
为了方便以后回顾,将grep的常用选项总结如下

–color=auto 或者 –color:表示对匹配到的文本着色显示

-i:在搜索的时候忽略大小写

-n:显示结果所在行号

-c:统计匹配到的行数,注意,是匹配到的总行数,不是匹配到的次数

-o:只显示符合条件的字符串,但是不整行显示,每个符合条件的字符串单独显示一行

-v:输出不带关键字的行(反向查询,反向匹配)

-w:匹配整个单词,如果是字符串中包含这个单词,则不作匹配

-Ax:在输出的时候包含结果所在行之后的指定行数,这里指之后的x行,A:after

-Bx:在输出的时候包含结果所在行之前的指定行数,这里指之前的x行,B:before

-Cx:在输出的时候包含结果所在行之前和之后的指定行数,这里指之前和之后的x行,C:context

-e:实现多个选项的匹配,逻辑or关系

-q:静默模式,不输出任何信息,当我们只关心有没有匹配到,却不关心匹配到什么内容时,我们可以使用此命令,然后,使用”echo $?”查看是否匹配到,0表示匹配到,1表示没有匹配到。

-P:表示使用兼容perl的正则引擎。

-E:使用扩展正则表达式,而不是基本正则表达式,在使用”-E”选项时,相当于使用egrep。

希望这篇文章能对你有所帮助~~


http://chatgpt.dhexx.cn/article/ocNqOUwi.shtml

相关文章

netdata mysql_netdata使用

简介 一直想找一个合适的系统监控软件,简单好用易安装易扩展易维护,转悠了好久没有找到合适的,偶然间在开源中国中看到了netdata,第一眼看到界面眼前就为之一亮,安装后更是觉得大赞,好东西分享一下。 Netda…

Docker系列 酷炫的服务器性能监测工具netdata

转自我的个人博客https://blognas.hwb0307.com。欢迎关注! 前言 此文内容目前处于BETA版本 我之前在《Linux基础 目录管理的个人实践》曾经介绍过一款叫Ward的VPS性能监控应用,当时对它的privilegedtrue带来的安全性问题有点担忧。近期忽然发现它的Docke…

netdata安装方式

相关地址 : (建议按照官网文档进行操作) github : https://github.com/netdata/netdata 官网 : https://learn.netdata.cloud/docs/agent/packaging/installer/ 官网-docker安装 : https://hub.docker.com/r/netdata/netdata/ // 镜像拉取 : docker pull netdata/netdata// doc…

Netdata与centos7

Netdata是一个高度优化的Linux守护进程,它为Linux系统,应用程序,SNMP服务等提供实时的性能监测。 Github: https://github.com/firehol/netdata/wiki/Installation (安装教程) 开源中国:http://www.oschina.net/p/netdata/simila…

linux-netdata监控配置

netdata部署步骤记录 安装步骤的总结 1.wget https://github.com/netdata/netdata/archive/v1.16.1.tar.gz tar -zxvf v1.16.1.tar.gz 解压 2.# CentOS / Red Hat Enterprise Linux yum install autoconf automake curl gcc git libmnl-devel libuuid-devel openssl-devel …

netdata监控服务器主机(包括Docker容器)

效果 Docker部署 创建挂载目录 mkdir -p /data/netdata/{netdatacache,netdatalib}docker运行 docker run -d --namenetdata \-p 19999:19999 \-v /data/netdata/netdatalib:/var/lib/netdata \-v /data/netdata/netdatacache:/var/cache/netdata \-v /etc/passwd:/host/etc…

centos7 安装Netdata

1. 软件介绍 Netdata是一款Linux系统实时性能监测工具,以web的可视化方式展示系统及应用程序的实时运行状态。前端响应快,UI很整洁,操作方面,支持图表重置,缩放。具体优点如下: 界面酷炫:inte…

运维监控之——云原生运维监控报警架构(prometheus+grafana+netdata+Thanos+Alertmanager+Consul)

成果展示: 一个项目单独拎出来: 总体大屏: ​​​​​​​K8S大屏: Linux 主机大屏: 说明: 使用Prometheus(https://github.com/prometheus)原生的k8s服务发现驱动,采集容器化信息&#xff1b…

ARM机器使用netdata监控

ARM机器使用netdata监控 安装 下载地址 https://github.com/netdata/netdata/releases 找到对应平台的版本下载 此处使用了netdata-aarch64-latest.gz.run 下载下来直接sh netdata-aarch64-latest.gz.run 进行安装。 安装完成之后,可以通过在浏览器中访问htt…

非入侵式Linux 性能监控面板 NetData安装部署流程。

构建最佳的实时健康监控和性能故障排除解决方案: Netdata 是一款 Linux 性能实时监测工具.。以web的可视化方式展示系统及应用程序的实时运行状态(包括cpu、内存、硬盘输入/输出、网络等linux性能的数据)。 netdata官网:https:/…

openwrt - 性能监控 netdata

opkg open package management(opkg) 离线安装视频:https://www.youtube.com/watch?vEZtG8fmFewg 【笔记】openwrt - nginx配置反向代理(https下netdata不显示) https://lawsssscat.blog.csdn.net/article/details…

Netdata监控安装(汉化)

文章目录 Netdata安装部署<内网>软体下载修改脚本部署安装集群配置监控配置启动环境降低CPU占用Docker数据缺失 本教程主要描述内网环境下netdata汉化版本的安装过程 Netdata安装部署<内网> 软体下载 1、Netdata主程序&#xff1a; https://github.com/firehol/n…

Openwrt 手动安装 netdata 插件

环境&#xff1a; 硬件&#xff1a; 星际宝盒 IPQ4019 固件版本&#xff1a; OpenWrt R21.11.11 / LuCI Master (git-21.329.83689-00cb491) 起因&#xff1a; 首先 Netdata是一款开源的 、轻量的、跨平台的秒级数据收集与可视化呈现的Linux服务器性能监测工具&#xff0c;与Za…

Netdata 是一款 Linux 性能实时监测工具,以web的可视化方式展示

Netdata 是一款 Linux 性能实时监测工具.。以web的可视化方式展示系统及应用程序的实时运行状态&#xff08;包括cpu、内存、硬盘输入/输出、网络等linux性能的数据&#xff09;。 Netdata文档地址&#xff1a;https://github.com/firehol/netdata/wiki https://github.com/n…

Netdata安装以及汉化

Linux下netdata中文版安装以及汉化 Netdata 是一款 Linux 性能实时监测工具.。以web的可视化方式展示系统及应用程序的实时运行状态&#xff08;包括cpu、内存、硬盘输入/输出、网络等linux性能的数据&#xff09;。炫酷的界面来显示你的服务器性能。还能显示Nginx &#xff0…

linux性能监控工具Netdata安装和卸载教程

Netdata介绍 Netdata是一款Linux系统性能实时监控工具。是一个高度优化的Linux守护进程&#xff0c;可以对Linux系统、应用程序(包括但不限于Web服务器&#xff0c;数据库等)、SNMP服务等提供实时的性能监控。 Netdata用可视化的手段&#xff0c;将其被监控的信息展现出来&am…

Linux服务器监控的神器:Netdata

请访问我的独立博客查看文章&#xff1a; http://blog.ywheel.com/post/2017/03/26/netdata/ 由于工作的关系&#xff0c;最近在思考如何做集群、服务器的监控。在网上东转转西转转&#xff0c;偶然发现了一个单机监控的2016新秀Netdata&#xff0c;眼前着实为之一亮。 令人印象…

NetData 入门

NetData 入门 Y_Wolf&#xff08;2020.05.06&#xff09; 文章目录 NetData 入门一、项目环境二、NetData简介三、NetData安装方法一方法二 四、NetData的基本操作五、卸载NetData五、NetData的相关配置文件六、添加第三方扩展插件&#xff08;NVIDIA-SMI&#xff09;在这里插入…

netdata

导航 (返回顶部) 1. 概述2. 初级使用 2.1 使用截图2.2 仪表板帮助(滑鼠介面) 3. 扩展使用 3.1 查看当前配置3.2 启用远程访问3.3 也可运作在其他Web服务器(代理)上3.4 Netdata默认情况下通过Google Analytics&#xff08;分析&#xff09;收集匿名使用信息。3.5 繁体汉化补丁: …

Netdata,Linux性能实时监测工具

一&#xff0c;什么是Netdata Netdata是一个高度优化的Linux守护进程&#xff0c;它为Linux系统&#xff0c;应用程序&#xff0c;SNMP服务等提供实时的性能监测。 它用可视化的手段&#xff0c;将被监测者最细微的细节&#xff0c;展现了出来。这样&#xff0c;你便可以清晰…