如何在 Ubuntu 上使用 egrep 命令教程
简介
egrep
(Extended Global Regular Expression Print)是 Linux 中一个强大的文本搜索工具,用于使用扩展正则表达式(ERE)进行高级模式匹配。egrep
是 grep
命令家族的一部分,包括 grep
和 fgrep
。与 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
-
BRE:
grep
(BRE)需要转义某些元字符以使用它们的特殊含义,例如\+
或\?
。例如,要在文件中搜索一个或多个a
字符的出现,使用+
符号形成命令grep 'a\+' file.txt
。 -
ERE:
egrep
(ERE)元字符(+
,?
,|
)和括号()
不需要转义,使得语法更干净、直观,适合复杂模式。例如,你可以在egrep
中使用相同的grep
字符而不转义,形成命令egrep 'a+' file.txt
。
第三步:基本 egrep
命令语法
egrep
命令使用以下命令语法:
egrep [options] 'pattern' [file...]
在上述命令中:
[options]
:包括可选标志,修改命令的行为。'pattern'
:定义你想要查找的模式。[file...]
:指定你想要搜索的文件。
第四步:设置示例目录和文件
按照以下步骤创建示例目录和文件以测试 egrep
命令。
- 切换到你的用户主目录。
$ cd ~
- 在你的工作目录中创建
vultr.txt
,Vultr.txt
和VULTR.txt
文件。
$ touch vultr.txt Vultr.txt VULTR.txt
- 创建两个目录和一个子目录。
$ mkdir -p dir dir1/sub_dir
上述命令创建了 dir
目录和 sub_dir
子目录在 dir1
下。-p
选项在父目录不存在时创建它。
-
使用文本编辑器(如
nano
)创建一个新的样本vultr.txt
文件。 -
向文件中添加以下内容。
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
命令进行实际示例。
- 执行基本模式搜索,搜索所有包含
Vultr
关键词的行。
$ egrep 'Vultr' vultr.txt
- 使用
--color
选项突出显示Vultr
关键词的颜色。
$ egrep --color=auto 'Vultr' vultr.txt
- 搜索包含
vultr
关键词的行,不考虑大小写。
$ egrep -i 'vultr' vultr.txt
上述命令在 vultr.txt
中搜索 vultr
关键词,并显示所有匹配的结果,忽略大小写敏感性。例如,vultr
,Vultr
和 VULTR
都匹配搜索。
- 运行反转搜索,找到不包含
vultr
关键词的行。
$ egrep -v 'vultr' vultr.txt
- 计算包含
Vultr
关键词的匹配行数。
$ egrep -c 'Vultr' vultr.txt
- 显示包含
Vultr
关键词的行及其相应的行号。
$ egrep -n 'Vultr' vultr.txt
- 在多个文件中搜索包含
Vultr
关键词的行。
$ egrep 'Vultr' vultr.txt Vultr.txt
- 递归搜索包含
Hello
关键词的目录中的行。
$ egrep -r 'Hello' /home/vultr_user/dir1
上述命令在 /home/vultr_user/dir1
目录及其子目录中的所有文件中搜索 Hello
关键词。
- 显示
Number
关键词前的上下文。
$ egrep -B 2 -n 'Number' vultr.txt
上述命令显示包含 Number
关键词的每个匹配行前的两行上下文以及行号。
- 显示
Number
关键词后的上下文。
$ egrep -A 2 -n 'Number' vultr.txt
上述命令显示包含 Number
关键词的每个匹配行后的两行上下文以及行号。
- 显示
Number
关键词周围的上下文。
$ egrep -C 2 -n 'Number' vultr.txt
上述命令显示包含 Number
关键词的每个匹配行前后各两行上下文。
第七步:使用高级 egrep
命令选项
按照以下步骤使用高级 egrep
命令选项。
- 搜索包含
Example
后跟from
关键词的行,使用分组搜索。
$ egrep '(Example.*from)' vultr.txt
上述命令搜索 vultr.txt
中任何字符后跟 Example
关键词然后是 from
关键词的行。
- 搜索包含完整
vultr
关键词的行。
$ egrep -w 'vultr' vultr.txt
上述命令搜索 vultr.txt
中包含 vultr
作为完整术语的行,而不是作为另一个关键词的一部分,如 vultrs
。
- 搜索完全匹配
Vultr
的行。
$ egrep -x 'Vultr' vultr.txt
上述命令搜索 vultr.txt
中匹配 Vultr
关键词的行,没有任何额外字符。
第八步:在 Linux 中使用 egrep
命令与正则表达式
按照以下步骤使用正则表达式与 egrep
命令过滤搜索结果。
-
创建一个
sample.txt
文件。 -
向
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
保存并关闭文件。
-
锚点:匹配行的开始
^
或结束$
。- 搜索以
error
关键词开始的日志文件中的行。
- 搜索以
$ egrep '^error' sample.txt
上述模式匹配所有以 error
关键词开始的行。如果一行以另一个术语开始,则匹配失败。
-
字符类:匹配括号
[ ]
内的任何字符。- 搜索包含小写字母
a
到f
之间的任何行。
- 搜索包含小写字母
$ egrep '[a-f]' sample.txt
上述模式匹配任何小写字母从 a
到 f
以返回包含至少任何一个字符的行。
-
重复:匹配零次或多次
*
、一次或多次+
或零次或一次?
出现的关键词。- 搜索包含零次或多次
a
关键词的行。
- 搜索包含零次或多次
$ egrep 'a*' sample.txt
- 搜索包含一次或多次
a
关键词的行。
$ egrep 'a+' sample.txt
- 搜索包含可选
s
的logs
关键词的行(以匹配log
和logs
)。
$ egrep 'logs?' sample.txt
上述模式匹配包含 log
或 logs
的所有行。(?
)问号符号使 s
字符可选。
-
交替:使用
|
管道符号匹配任一模式。- 搜索包含
error
或warning
的行。
- 搜索包含
$ egrep 'error|warning' sample.txt
上述模式匹配包含 error
或 warning
关键词的所有行。
-
分组:使用括号
( )
匹配组模式。- 搜索包含
error
或warning
后跟log
关键词的行。
- 搜索包含
$ egrep '(error|warning) log' sample.txt
-
单词边界:仅匹配整个单词,使用
\b
。- 搜索包含
error
作为完整关键词的行,而不是另一个关键词的一部分,如errors
。
- 搜索包含
$ egrep '\berror\b' sample.txt
-
行边界:仅匹配整行,使用
^pattern$
。- 执行包含
error
关键词的行的精确搜索,没有任何额外文本。
- 执行包含
$ egrep '^error$' sample.txt
第九步:将 egrep
与其他命令结合使用
-
使用
egrep
与pipe
结合,将另一个命令的输出作为egrep
输入进行过滤。例如,运行以下命令,在ps aux
命令输出中查找包含data
关键词的行。 -
将
egrep
与find
结合使用,在find
列出的文件中搜索模式。例如,运行以下命令,在目录中所有.txt
文件中搜索Hello
关键词。
$ find /home/vultr_user/dir1 -name "*.txt" -exec egrep 'Hello' {} \;
上述 find
命令在 /home/vultr_user/dir1
目录及其子目录中搜索所有 .txt
文件。然后,egrep
在文件中搜索 Hello
关键词。
- 将
egrep
与xargs
结合使用,进行更高效的搜索。例如,在目录中所有.txt
文件中搜索Hello
关键词。
$ find /home/vultr_user/dir1 -name "*.txt" | xargs egrep 'Hello'
上述命令在 /home/vultr_user/dir1
目录中找到所有 .txt
文件,并将输出传递给 egrep
搜索 Hello
关键词。xargs
通过在单个命令中传递多个文件给 egrep
来提高效率。
- 将
egrep
与wc
命令结合使用。
$ 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_