Linux中Grep命令(在文本中搜索指定文本)

2023-11-16

Grep(Global regular expression  print,全局正则表达式输出)的缩写,他是Linux中最强的的命令之一。grep在一个或多个输入文本中搜索与给定模式匹配的行。并将每条匹配的行写入标准的输出。如果未至定文件,则grep将从标准输入读取,输入通常是另一个命令的输出。

一、grep命令语法:

grep [OPTIONS] PATTERN [file....]

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

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

为了能够搜索文件,运行命令的用户必须对文件具有可读权限。

二、grep最基本的用法是在文件中搜索字符串(文本)

1、要显示/etc/passwd文件中包含字符串bash的所有行,请运行一下命令:

grep  bash /etc/passwd   # 查询passwd中有多少行包含bash

        2、如果字符串中包含空格,则需要将其用单引号或者双引号引起来。

grep "Gnome Display Manager" /etc/passwd #字符串包含字符需要用单引号或者双引号引起来

        3、反转匹配(排除),要显示与模式不匹配的行,用 -V(--invert-match)选项

grep -V nologin /etc/passwd # 打印不包含nologin的行

        4、使用grep过滤命令的输出,使用grep通过管道过滤命令的输出,并且只有与给定模式匹配的行才会打印在终端上。

ps -ef|grep www-data # 找出系统以用户www-data的身份在系统上运行

        可以在命令中使用多个管道,在上面的输出中看到的,还有一行包含grep进程,如果不希望看到改行,则将输出再传递到另一个grep实例,如下所示:

ps -ef|grep www-data|grep -V grep

        5、递归搜索,要递归搜索模式,可以使用-r选项(或--recursive)调用grep。使用此选项时,grep将搜索指定目录下的所有文件,并跳过递归遇到的符号链接。要跟随所有符号链接,请使用-R(--dereference-recursive),而不是-R

grep -r linuxidc /etc #显示在/etc目录的所有文件中包含linuxids的行,输出包含以文件的完整路径为前缀的匹配行

        6、如果使用-R选项,则grep将跟随所有符号链接

grep -R linuxidc.com /etc   #注意下面输出的最后一行。 当用-r调用grep时,不会打印该行,因为Nginx启用站点的目录中的文件是指向可用站点目录中的配置文件的符号链接。

      7、仅显示文件名

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

         以下命令在当前工作目录中搜索所有以.conf结尾的文件,并仅显示包含字符串linuxidc.com的文件的名称:

grep -l linuxidc.com *.conf
# 显示如下
# 输出将如下所示:

# tmux.conf
# haproxy.conf

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

# grep -Rl linuxidc.com /tmp

      8、不区分大小写的搜索

        默认情况下,grep区分大小写。 这意味着将大写和小写字符视为不同的字符。要在搜索时忽略大小写,请使用-i选项(或--ignore-case)调用grep。

grep Zebra /usr/share/words # 搜索不带任何选项的Zebra时,以下命令将不显示任何输出
# 使用-i选项执行不区分大小写的搜索,则它将同时匹配大小写字母
grep -i Zebra /usr/share/words # 指定“ Zebra”将匹配该字符串的“ zebra”,“ ZEbrA”或任何其他大小写字母组合

        9、搜索全词

搜索字符串时,grep将显示该字符串嵌入较大字符串中的所有行。例如,如果您搜索“ gnu”,则将以较大的单词(例如“ cygnus”或“ magnum”)嵌入“ gnu”的所有行都将匹配:

grep gnu /usr/share/words
# 输出结果如下
# cygnus
# gnu
# interregnum
# lgnu9d
# lignum
# magnum
# magnuson
# sphagnum
# wingnut

要仅返回指定字符串是整个单词(用非单词字符括起来)的那些行,请使用-w(或--word-regexp)选项。文字字符包括字母数字字符(a-z,A-Z和0-9)和下划线(_)。 所有其他字符均视为非单词字符。



grep -w gnu /usr/share/words # 包括-w选项,则grep命令将仅返回其中包含gnu作为单独单词的那些行
# 输出结果如下
# gnu

     10、显示行号

-n(或--line-number)选项告诉grep显示包含与模式匹配的字符串的行的行号。 使用此选项时,grep将匹配项打印到以行号为前缀的标准输出。

grep -n 10000 /etc/services # 显示/etc/services文件中的包含字符串10000并带有匹配行号的行

下面的输出显示在行104445和10446上找到匹配项。

10445:ndmp            10000/tcp              # Network Data Management Protocol
10446:ndmp            10000/udp              # Network Data Management Protocol

      11、Count函数匹配

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

grep -c '/usr/bin/zsh' /etc/passwd # 计算以/usr/bin/zsh作为shell的帐户数量
 
# 输出: 4

       12、GNU Grep具有三个正则表达式功能集,Basic、 Extended 和 perl 兼容

        Basic正则表达式:

默认情况下,grep将模式解释为基本的正则表达式,其中除元字符之外的所有字符实际上都是与自己匹配的正则表达式。

以下是最常用的元字符的列表:

grep "^kangaroo" file.txt # 使用^(插入符号)符号可在行首匹配表达式。 仅当字符串kangaroo出现在行的开头时才匹配。
grep "kangaroo$" file.txt # 使用$(美元)符号来匹配行尾的表达式。 仅当字符串kangaroo出现在行的最后时才匹配。
grep "kan..roo" file.txt # 使用.(点)符号以匹配任何单个字符。 匹配以kan开头,然后有两个字符并以字符串roo结尾的任何内容。
grep "acce[np]t" file.txt # 使用[](括号)来匹配括号中包含的任何单个字符。 找到包含accept或“ accent”的行。
grep "co[^l]a" file.txt # 使用[^]来匹配不在括号内的任何单个字符。匹配任何包含co(any_letter_except_l)a的字符串组合,如coca、cobalt等,但不匹配包含cola的行。
# 要转义下一个字符的特殊含义,请使用\(反斜杠)符号。

Extended正则表达式

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

# 匹配并提取给定文件中的所有电子邮件地址:
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" file.txt

# 匹配并提取给定文件中的所有有效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选项仅用于打印匹配的字符串。

搜索多个字符串(模式)

可以使用OR运算符|将两个或多个搜索模式结合在一起。

默认情况下,grep将模式解释为基本正则表达式,其中的元字符(例如|) 失去其特殊含义,必须使用反斜杠版本。

# 在以下示例中,我们正在Nginx日志错误文件中搜索所有出现的致命,错误和严重的单词:
grep 'fatal\|error\|critical' /var/log/nginx/error.log

# 如果使用扩展正则表达式选项-E,则不应转义运算符|,如下所示:

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

在匹配之前打印行

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

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

$grep -B 5 root /etc/passwd

Linux中的Grep命令(在文件中查找文本)

匹配后打印行

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

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

$grep -A 5 root /etc/passwd

Linux中的Grep命令(在文件中查找文本)

 

 

 

G

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux中Grep命令(在文本中搜索指定文本) 的相关文章

随机推荐

  • 详解 MySQL InnoDB 实现原理

    MySQL InnoDB 引擎现在广为使用 它提供了事务 行锁 日志等一系列特性 本文分析下 InnoDB 的内部实现机制 MySQL 版本为 5 7 24 操作系统为 Debian 9 1 InnoDB 架构 Innodb 架构图 Inn
  • Java基于Selenium动态抓取页面

    Java基于Selenium动态抓取页面 前情介绍 解决 思路 编码 解决过程中遇到的问题一 解决过程中遇到的问题二 总结 前情介绍 前段时间开发了一个功能 通过HttpClient访问某个页面 获取页面的全部html内容 之后通过抓取过来
  • 【Spring Boot 集成应用】 OAUTH2统一认证单点登录中的各种模式说明

    1 OAUTH2统一认证介绍 OAuth 2 0 是一个行业的标准授权协议 OAuth 2 0 专注于简化客户端开发人员 同时为 Web 应用程序 桌面应用程序 手机等各种设备接入提供特定的授权流程 2 传统登陆认证 传统登陆方式是在每个服
  • python基础笔记(三)_Matplotlib基础语法

    图表绘制工具 Matplotlib 概念 一个python版的matlab绘图接口 以2D为主 支持python numpy pandas基本数据结构 有较丰富的图表库 图表窗口 plt show 直接生成图表 matplotlib inl
  • seate底层原理_Seate

    Seata是阿里开源的一个分布式事务框架 Seata主要有两种分布式事务实现方案 AT及TCC AT模式主要关注多 DB 访问的数据一致性 当然也包括多服务下的多 DB 数据访问一致性问题 TCC 模式主要关注业务拆分 在按照业务横向扩展资
  • Jmeter(三十七) - 从入门到精通进阶篇 - 输出HTML格式的性能测试报告(详解教程)

    1 简介 相对于Loadrunner Jmeter其实也是可以有测试报告产出的 虽然一般都不用 没有Loadrunner的报告那么强大是一方面 但是有小伙伴们私下问 那宏哥还是顺手写一下吧 今天我们就来学习下 如何输入HTML格式的JMet
  • nginx下面完美配置解决404 file not found(让nginx支持PATHINFO路由模式)

    老朱亲自写的 最完美Nginx 配置文件 server listen 80 server name xxxx com if host d d d d return 404 禁IP访问 root var www index index htm
  • C++ 中 operator< 运算符重载来实现 sort 排序的简单理解

    先上代码 Struct Student string id int grade bool operator lt const Student t const if grade t grade return grade gt t grade
  • 面试常见问题

    最失败的案例 复盘经验和反思 有分量的事情 最成功 印象最深的案例 网络架构较为复杂 用户端为移动手持 即无线网络 服务端为固网私有网络 中间为办公网 即服务端网络 办公网 用户端 故障排查 分别在服务端 服务器 网络中转端 防火墙 用户端
  • PLSQL的使用

    目录 1 PLSQLl的安装 配置文件配置教程地址 2 PLSQL建表出现乱问题 Oracle PLSQL 表中字段 注释时为乱码 解决方式 1 PLSQLl的安装 配置文件配置教程地址 https blog csdn net master
  • java垃圾回收机制

    今天算是对java的gc有了一定的了解 三篇文章做个标记 配合上篇文章来看 http www daniel journey com archives 139 另外推荐三篇很棒的文章 JVM调优总结 Java 6 JVM参数选项大全 一次Ja
  • ng-class的几种用法

    方法一 div div checker disabled checker 是CSS样式 selectAllButton是判断条件 值为 true or false 方法二 div div item disab是判断条件 值为 true or
  • linux rootfs制作

    作一个嵌入式Linux rootfs 并且实现 web 服务 1 文件系统简介 理论上说一个嵌入式设备如果内核能够运行起来 且不需要运行用户进程的话 是不需要文件系统的 文件系统简单的说就是一种目录结构 由于 linux操作系统的设备在系统
  • 数组切片[1::2]怎么理解

    python中数组切片 在数组a中 有三个地方可以设置参数a 位置 列表初始索引 默认为0 位置 列表结束索引 默认到最后一个元素 包含最后一个元素 位置 为步长 默认为1 a np arange 1 10 print a 1 2 3 4
  • kafka创建话题遇到的错误

    确定Kafka安装和启动正确 ZooKeeper可以查到所有的Brokers 但执行 kafka topics sh create zookeeper localhost 2181 replication factor 3 partitio
  • Linux iperf3:网络性能测试工具

    文章目录 iperf3简介 安装 详细命令参数 Server 端参数 Client 端参数 示例 服务端 先启动 客户端 iperf3简介 iPerf3是用于主动测试IP网络上最大可用带宽的工具 它支持时序 缓冲区 协议 TCP UDP S
  • 点云旋转平移(二)—python open3d点云平移

    本文为博主原创文章 未经博主允许不得转载 本文为专栏 python三维点云从基础到深度学习 系列文章 地址为 https blog csdn net suiyingy article details 124017716 点云旋转平移介绍 请
  • 算法训练Day7

    目录 LeetCode454 四数相加 1 思路 2 代码实现 3 复杂度分析 4 思考 Leetcode383 赎金信 1 思路 2 代码实现 3 复杂度分析 4 思考 Leetcode15 三数之和 方法一 双指针法 1 思路 2 代码
  • c++ libuv工作队列

    1 说明 libuv 提供了一个线程池 可用于运行用户代码 libuv 中的工作队列中的任务会在线程池中执行 libuv 中的线程池在内部用于运行所有文件系统操作以及 getaddrinfo 和 getnameinfo 请求 libuv 中
  • Linux中Grep命令(在文本中搜索指定文本)

    Grep Global regular expression print 全局正则表达式输出 的缩写 他是Linux中最强的的命令之一 grep在一个或多个输入文本中搜索与给定模式匹配的行 并将每条匹配的行写入标准的输出 如果未至定文件 则