使用 Linux grep 命令在文件中查找文本
在文件或文本流中搜索文本模式是您在系统管理员职业生涯中执行的最常见任务之一。这是一项宝贵的技能,可让您检查各种系统配置、分析数据、排除日志故障以及执行许多其他活动。
在 Linux 系统中查找文本的最常见方式是使用命令行实用程序grep
。此实用程序最初是在 20 世纪 70 年代初为 Unix 操作系统开发的。Grep 经过多年的发展,目前 Linux 上最常用的版本 GNU grep 具有彩色输出等附加功能。但是,其主要功能仍然相同。
使用grep
,您可以快速在单个文件、一组文件或使用 shell 管道运算符的文本中查找与正则表达式匹配的文本。stdin
本文介绍如何使用grep
命令查找文本。
在文件中查找文本
最基本的使用方法grep
是在单个文件中搜索文本。为此,请键入grep
要搜索的文本模式和要搜索的文件名。例如,要查找安全 Shell (SSH) 守护程序使用的端口,请Port
在文件中搜索/etc/ssh/sshd_config
:
$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
请注意,grep
无论模式位于何处,都会找到与文本模式匹配的所有行。
使用正则表达式扩展 grep
Port
在上例中,当您在 SSH 配置文件中搜索时,grep
会返回两行。您要查找的行,即Port 22,以及包含搜索模式的附加行。在某些情况下,这正是您想要的。在其他情况下,grep
可能会找到太多您不感兴趣的条目,需要您对它们进行排序才能找到所需的信息。
为了避免这种情况,您可以使用正则表达式来更具体地说明您要查找的内容。例如,要仅查找以单词开头的行Port
,您可以使用正则表达式运算符^
,如下所示:
$ grep ^Port /etc/ssh/sshd_config
Port 22
这次grep
仅返回以 开头的行Port
,因为第二行中的表达式Port
位于中间。
您还可以通过命令行参数使用扩展-E
正则表达式。例如,要搜索包含单词Port
后跟数字的模式,请使用以下正则表达式:
$ grep -E "Port [1-9]+" /etc/ssh/sshd_config
Port 22
您还可以使用运算符查找以文本模式结尾的行$
。例如,要查找以none
in结尾的所有行sshd_config
,请使用grep
以下命令:
$ grep none$ /etc/ssh/sshd_config
#RekeyLimit default none
#AuthorizedPrincipalsFile none
#AuthorizedKeysCommand none
#ChrootDirectory none
#VersionAddendum none
#Banner none
正则表达式是 的重要组成部分grep
,使其功能强大且灵活。但是,正则表达式是一个很大的话题。有关更多信息,请参阅Wikipedia 上的正则表达式或正则表达式 101。
在多个文件和目录中查找文本
与在单个文件中查找文本模式类似,您可以使用grep
它来在多个文件或目录中查找文本。要同时在多个文件中查找文本,请在第一个文件名后指定要从哪些文件进行搜索,或使用 shell 通配符(例如,*
用于所有文件)。例如,要在两个文件中搜索配置:
$ grep Port /etc/ssh/sshd_config /etc/ssh/ssh_config
/etc/ssh/sshd_config:Port 22
/etc/ssh/sshd_config:#GatewayPorts no
/etc/ssh/ssh_config:# Port 22
当您使用多个文件时,grep
在显示匹配的行之前显示找到匹配的文件的名称。
要在多个子目录中递归运行搜索,请使用命令行标志-R
:
$ grep -R ^Port /etc
/etc/ssh/sshd_config:Port 22
该grep
命令速度很快,并且能迅速返回结果,但如果指定要搜索的文件或子目录太多,则可能需要很长时间。
在另一个命令的输出中查找文本
与其他 Unix 实用程序类似,当您将另一个命令的输出导入其中时grep
也会起作用。这是一种快速而有用的方法,可以过滤命令的输出以匹配您要查找的文本模式。stdin
例如,如果您想检查软件包是否openssh
安装在您的 Fedora 或Red Hat Enterprise Linux (RHEL)操作系统中,您可以将rpm -qa
列出所有已安装软件包的命令的输出输入到管道中grep
以搜索模式:
$ rpm -qa | grep ssh
libssh-config-0.9.6-4.fc36.noarch
libssh-0.9.6-4.fc36.x86_64
openssh-8.8p1-1.fc36.1.x86_64
您可以使用 过滤长命令输出grep
,从而更轻松地找到有用的信息。
其他有用选项
该grep
命令提供了许多选项来更改其搜索模式或显示结果的方式。到目前为止,您已经在本文中看到了其中一些。虽然我无法列出所有选项,但以下是其他一些有用的示例:
-
使用选项
-i
进行不区分大小写的搜索。 - 使用选项
-v
反转搜索并显示与模式不匹配的行。 - 使用选项
-w
仅搜索整个单词,而不是其他单词中间的模式。 - 使用
--color
彩色输出选项,可以更容易地发现匹配的模式。
要查看完整的选项列表grep
,请查阅手册页。
下一步是什么?
GNU grep 实用程序灵活实用,可帮助您完成日常系统管理活动中的多项任务。您使用的越多grep
,就会越熟练,很快您就会发现您一直依赖它。
有关 的更多信息grep
,请查看以下一些链接: