如何在 Ubuntu 上使用 egrep 命令教程

如何在 Ubuntu 上使用 egrep 命令教程

简介

egrep(Extended Global Regular Expression Print)是 Linux 中一个强大的文本搜索工具,用于使用扩展正则表达式(ERE)进行高级模式匹配。egrepgrep 命令家族的一部分,包括 grepfgrep。与 grep 不同,egrep 支持扩展正则表达式,使其在复杂模式匹配中更加多功能。

本文将解释如何在 Linux 中使用 egrep 命令高效匹配模式并执行文件搜索任务。

准备工作

服务器准备

必要前提:

  • 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。

我将以 雨云 为例,带大家创建一台自己的云服务器,以便学习本篇文章的内容。

注册链接: https://www.rainyun.com/NTE2NDM3_

创建雨云服务器

以下步骤仅供参考,请根据实际需求选择配置。

  • 点击 云产品云服务器立即购买
  • 选择距离你较近的区域,以保证低延迟。

截图占位符

  • 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
  • 最后按照提示进行购买。
  • 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。

截图占位符

  • 我们使用 PowerShell 进行 SSH 远程连接到服务器,Win+R 打开运行窗口,输入 powershell 后点击确定。

截图占位符

  • 到此为止,我们的云服务器就远程连接上了。

安装和配置步骤

第一步:理解正则表达式

正则表达式(regex)是形成搜索模式的字符序列。Regex 使用多个字符和特殊符号搜索特定关键词或字符串。egrep 利用以下扩展正则表达式符号形成具有附加功能的搜索模式:

  • 锚点:匹配行的开始(^)或结束($)。例如,^error
  • 字符类:匹配括号内的任何字符([ ])。例如,[a-z]
  • 重复:匹配零次或多次(*)、一次或多次(+)或零次或一次(?)出现的字符。例如,a*a+a?
  • 交替:在两个或多个可能性之间找到匹配(|)。例如:error|warning
  • 分组:使用括号(( ))对模式进行分组。例如,(error|warning)
  • 单词边界:仅匹配整个关键词(\b)。例如,\berror\b
  • 行边界:仅匹配整行(^pattern$)。例如,^error$

第二步:区分 BRE 和 ERE

  • BREgrep(BRE)需要转义某些元字符以使用它们的特殊含义,例如 \+\?。例如,要在文件中搜索一个或多个 a 字符的出现,使用 + 符号形成命令 grep 'a\+' file.txt

  • EREegrep(ERE)元字符(+?|)和括号 () 不需要转义,使得语法更干净、直观,适合复杂模式。例如,你可以在 egrep 中使用相同的 grep 字符而不转义,形成命令 egrep 'a+' file.txt

第三步:基本 egrep 命令语法

egrep 命令使用以下命令语法:

egrep [options] 'pattern' [file...]

在上述命令中:

  • [options]:包括可选标志,修改命令的行为。
  • 'pattern':定义你想要查找的模式。
  • [file...]:指定你想要搜索的文件。

第四步:设置示例目录和文件

按照以下步骤创建示例目录和文件以测试 egrep 命令。

  1. 切换到你的用户主目录。
$ cd ~
  1. 在你的工作目录中创建 vultr.txtVultr.txtVULTR.txt 文件。
$ touch vultr.txt Vultr.txt VULTR.txt
  1. 创建两个目录和一个子目录。
$ mkdir -p dir dir1/sub_dir

上述命令创建了 dir 目录和 sub_dir 子目录在 dir1 下。-p 选项在父目录不存在时创建它。

  1. 使用文本编辑器(如 nano)创建一个新的样本 vultr.txt 文件。

  2. 向文件中添加以下内容。

Vultr
Hello World, Greetings from Vultr! This is file number 1
Example text, greetings from vultr!
Example text, greetings from VULTR!
Number of data centers: 25+ locations worldwide
Number of server plans: Over 20 different plans
CPU cores: From 1 to 64 cores
RAM: From 512MB to 256GB
Storage: SSD storage up to 10TB
Average uptime: 99.9%

保存并关闭文件。

第五步:使用最常见的 egrep 命令选项

以下列表显示了最常见的 egrep 命令选项:

选项描述
-i忽略大小写(不区分大小写的搜索)
-v反转匹配(显示不匹配模式的行)
-c显示匹配行的计数
-n显示匹配行的行号
-l仅列出包含匹配的文件名
-r递归搜索目录
-w仅匹配整个关键词
-x仅匹配整行
--color突出显示匹配模式的颜色
-A n显示每个匹配后 n 行的上下文
-B n显示每个匹配前 n 行的上下文
-C n显示每个匹配周围 n 行的上下文

第六步:在 Linux 中使用实际的 egrep 命令

按照以下步骤使用 egrep 命令进行实际示例。

  1. 执行基本模式搜索,搜索所有包含 Vultr 关键词的行。
$ egrep 'Vultr' vultr.txt
  1. 使用 --color 选项突出显示 Vultr 关键词的颜色。
$ egrep --color=auto 'Vultr' vultr.txt
  1. 搜索包含 vultr 关键词的行,不考虑大小写。
$ egrep -i 'vultr' vultr.txt

上述命令在 vultr.txt 中搜索 vultr 关键词,并显示所有匹配的结果,忽略大小写敏感性。例如,vultrVultrVULTR 都匹配搜索。

  1. 运行反转搜索,找到不包含 vultr 关键词的行。
$ egrep -v 'vultr' vultr.txt
  1. 计算包含 Vultr 关键词的匹配行数。
$ egrep -c 'Vultr' vultr.txt
  1. 显示包含 Vultr 关键词的行及其相应的行号。
$ egrep -n 'Vultr' vultr.txt
  1. 在多个文件中搜索包含 Vultr 关键词的行。
$ egrep 'Vultr' vultr.txt Vultr.txt
  1. 递归搜索包含 Hello 关键词的目录中的行。
$ egrep -r 'Hello' /home/vultr_user/dir1

上述命令在 /home/vultr_user/dir1 目录及其子目录中的所有文件中搜索 Hello 关键词。

  1. 显示 Number 关键词前的上下文。
$ egrep -B 2 -n 'Number' vultr.txt

上述命令显示包含 Number 关键词的每个匹配行前的两行上下文以及行号。

  1. 显示 Number 关键词后的上下文。
$ egrep -A 2 -n 'Number' vultr.txt

上述命令显示包含 Number 关键词的每个匹配行后的两行上下文以及行号。

  1. 显示 Number 关键词周围的上下文。
$ egrep -C 2 -n 'Number' vultr.txt

上述命令显示包含 Number 关键词的每个匹配行前后各两行上下文。

第七步:使用高级 egrep 命令选项

按照以下步骤使用高级 egrep 命令选项。

  1. 搜索包含 Example 后跟 from 关键词的行,使用分组搜索。
$ egrep '(Example.*from)' vultr.txt

上述命令搜索 vultr.txt 中任何字符后跟 Example 关键词然后是 from 关键词的行。

  1. 搜索包含完整 vultr 关键词的行。
$ egrep -w 'vultr' vultr.txt

上述命令搜索 vultr.txt 中包含 vultr 作为完整术语的行,而不是作为另一个关键词的一部分,如 vultrs

  1. 搜索完全匹配 Vultr 的行。
$ egrep -x 'Vultr' vultr.txt

上述命令搜索 vultr.txt 中匹配 Vultr 关键词的行,没有任何额外字符。

第八步:在 Linux 中使用 egrep 命令与正则表达式

按照以下步骤使用正则表达式与 egrep 命令过滤搜索结果。

  1. 创建一个 sample.txt 文件。

  2. sample.txt 文件中添加以下内容。

error occurred at 10:45
warning: disk space is low
all systems operational
warning logs updated at 09:00
log entry recorded
this is just an error logs
error
success
network issues at 12:30

保存并关闭文件。

  1. 锚点:匹配行的开始 ^ 或结束 $

    • 搜索以 error 关键词开始的日志文件中的行。
$ egrep '^error' sample.txt

上述模式匹配所有以 error 关键词开始的行。如果一行以另一个术语开始,则匹配失败。

  1. 字符类:匹配括号 [ ] 内的任何字符。

    • 搜索包含小写字母 af 之间的任何行。
$ egrep '[a-f]' sample.txt

上述模式匹配任何小写字母从 af 以返回包含至少任何一个字符的行。

  1. 重复:匹配零次或多次 *、一次或多次 + 或零次或一次 ? 出现的关键词。

    • 搜索包含零次或多次 a 关键词的行。
$ egrep 'a*' sample.txt
  • 搜索包含一次或多次 a 关键词的行。
$ egrep 'a+' sample.txt
  • 搜索包含可选 slogs 关键词的行(以匹配 loglogs)。
$ egrep 'logs?' sample.txt

上述模式匹配包含 loglogs 的所有行。(?)问号符号使 s 字符可选。

  1. 交替:使用 | 管道符号匹配任一模式。

    • 搜索包含 errorwarning 的行。
$ egrep 'error|warning' sample.txt

上述模式匹配包含 errorwarning 关键词的所有行。

  1. 分组:使用括号 ( ) 匹配组模式。

    • 搜索包含 errorwarning 后跟 log 关键词的行。
$ egrep '(error|warning) log' sample.txt
  1. 单词边界:仅匹配整个单词,使用 \b

    • 搜索包含 error 作为完整关键词的行,而不是另一个关键词的一部分,如 errors
$ egrep '\berror\b' sample.txt
  1. 行边界:仅匹配整行,使用 ^pattern$

    • 执行包含 error 关键词的行的精确搜索,没有任何额外文本。
$ egrep '^error$' sample.txt

第九步:将 egrep 与其他命令结合使用

  1. 使用 egreppipe 结合,将另一个命令的输出作为 egrep 输入进行过滤。例如,运行以下命令,在 ps aux 命令输出中查找包含 data 关键词的行。

  2. egrepfind 结合使用,在 find 列出的文件中搜索模式。例如,运行以下命令,在目录中所有 .txt 文件中搜索 Hello 关键词。

$ find /home/vultr_user/dir1 -name "*.txt" -exec egrep 'Hello' {} \;

上述 find 命令在 /home/vultr_user/dir1 目录及其子目录中搜索所有 .txt 文件。然后,egrep 在文件中搜索 Hello 关键词。

  1. egrepxargs 结合使用,进行更高效的搜索。例如,在目录中所有 .txt 文件中搜索 Hello 关键词。
$ find /home/vultr_user/dir1 -name "*.txt" | xargs egrep 'Hello'

上述命令在 /home/vultr_user/dir1 目录中找到所有 .txt 文件,并将输出传递给 egrep 搜索 Hello 关键词。xargs 通过在单个命令中传递多个文件给 egrep 来提高效率。

  1. egrepwc 命令结合使用。
$ egrep -o 'Vultr' vultr.txt | wc -l

上述命令计算 Vultr 关键词在 vultr.txt 文件中出现的次数。-o 选项指示 egrep 只打印匹配部分,而 wc -l 计算搜索结果中的行数。

结尾

你已经使用 egrep 命令在 Linux 中进行了实际示例、选项和语法的学习,用于搜索文件中的特定内容。egrep 支持扩展正则表达式,适合广泛的模式匹配任务。你可以通过将 egrep 与其他 Linux 命令集成来有效地使用它,无论是基本搜索还是复杂的文本处理任务。更多信息,请运行 man egrep 查看命令的手册页。

雨云 - 新一代云服务提供商:https://www.rainyun.com/NTE2NDM3_

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xxin¥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值