Linux 中的 grep 命令示例
Grep 是一个有用的命令,可帮助您快速搜索和查找文件内容。
“Linux 中的一切都是文件”,这就是大多数 Linux 用户花费大量时间修改文件内容的原因。
这就是 grep 命令发挥关键作用的地方,它可以让您在文本文件中搜索和匹配模式或获取输出。
因此,在本教程中,我将引导您了解学习 grep 命令所需的所有要点:
命令的基本语法和流行标志
-
命令的实际示例
grep 命令练习题
以下是如何使用 grep 命令
要使用 grep 命令,了解语法很重要。
这是 grep 命令的基本语法:
grep [OPTIONS] PATTERN <Filename>这里,
[OPTIONS]:使用给定的选项集,您可以更改 grep 命令的默认行为,例如使用-i启用不区分大小写的搜索。PATTERN:您可以在此处指定要从文件或命令输出中查找的文本。它也可以是更复杂模式的正则表达式。:在这里您指定要在其中搜索的文件,如果您没有指定任何文件,那么它将从标准输入中搜索。
现在,让我们看一下 grep 命令的一些常用选项:
-i搜索时忽略大小写。
-v-
打印与模式不匹配的行。
-n显示每个匹配行的行号。
-w仅匹配整个单词,而不匹配单词的一部分。
-c计算匹配行的数量,不打印行。
-r递归地搜索目录。
-A n在每个匹配行之后打印 n 行。
-B n在每个匹配行之前打印 n 行。
-C n在每个匹配行之前和之后打印 n 行。
-f Filename从文件中读取搜索模式,每行一个。
-o仅打印该行的匹配部分。
您可能想知道 - 当您使用不带任何选项的 grep 命令时会发生什么?嗯,它只是打印包含该模式的行。
例如,在这里,我想在名为 error.log 的文件中搜索 error 关键字,并且在没有任何其他选项的情况下,它给出了以下输出:
你看到了吗?它会突出显示找到的模式并打印包含该模式的行。
为了使本教程易于理解,我将使用名为 error.log 的示例文件,其中包含以下行:
This is a log file with various messages.
An error occurred at 10:00 AM.
The system encountered an unexpected issue.
Everything is working normally now.
Another error message at 11:30 AM.
Warning: Please check disk usage.
Log closed at 12:00 PMgrep命令的实际例子
在本节中,我将介绍 grep 命令的各种示例,以便您可以更好地了解如何使用 grep 命令。
1. 不区分大小写的搜索
默认情况下,grep 命令模式区分大小写,并且在大多数情况下,它运行良好,但您可能希望关闭区分大小写。
为此,您可以使用 -i 标志,如下所示:
grep -i PATTERN Filename为了演示这一点,我将使用 ERROR 作为搜索模式,它将显示匹配模式,而不考虑大小写:
grep -i ERROR error.log2. 在匹配行的前后显示n行
默认情况下,grep 命令仅打印匹配行,但有时您需要匹配行的上下文。因此,您打印匹配行之前和之后的行。
在匹配行之前打印 n 行
要在匹配行之前打印 n 行,请使用 -B 标志并指定要打印的行数,如下所示:
grep -B <number_of_lines> PATTERN Filename例如,在这里,我在每个匹配行之前打印一行:
grep -B 1 error error.log 在匹配行之后打印 n 行
要打印匹配行后的 n 行,请使用 -A 标志并指定行数,如下所示:
grep -A <number_of_lines> PATTERN Filename如果我想在匹配行之后打印一行,那么我将使用以下内容:
grep -A 1 error error.log在匹配行之前和之后打印 n 行
如果您想同时打印之前和之后的行,则可以使用 -C 标志并指定要打印的行数,如下所示:
grep -C <number_of_lines> PATTERN Filename假设我想在匹配的模式行之前显示 1 行,在匹配模式行之后显示 1 行,那么我将使用以下内容:
grep -C 1 error error.log3. 显示与模式不匹配的线条
大多数情况下,您将使用 grep 命令来匹配模式,但它也允许您反转搜索结果。
简而言之,您指定搜索词,它将打印与给定模式不匹配的行,为此,您可以使用 -v 标志,如下所示:
grep -v PATTERN Filename例如,如果我想打印不包含 error 术语的每一行,那么我将使用以下内容:
grep -v error error.log4.显示匹配行数
要显示匹配行数,您所要做的就是使用 -n 标志,如下所示:
grep -n PATTERN Filename5、显示匹配结果总数
如果您想知道匹配结果的数量,则可以使用 -c 标志,如下所示:
grep -c PATTERN Filename例如,在这里,我想查找 error.log 文件中提到术语 error 的次数,因此我使用了以下命令:
grep -c error error.log6. 在多个文件中搜索模式
如果您希望从多个文件中搜索模式,那么您所要做的就是附加多个文件进行搜索,如下所示:
grep PATTERN File1 File2例如,在这里,我从两个文件中搜索了 error 字符串:error.log 和 error.txt,它给出了以下输出:
grep error error.log error.txt7. 从目录中的每个文件中搜索模式
如果您想从目录中存在的每个文件中搜索特定模式,则可以递归地使用 grep 命令,它将从该特定目录中存在的每个文件中搜索给定模式。
要启用递归搜索,请使用 -r 标志,如下所示:
grep -r PATTERN <Directory or path to directory>例如,在这里,我在当前目录中搜索了 error 字符串:
grep -r error .8. 搜索确切的单词
默认情况下,grep 命令将打印所有匹配的模式,这不是您总是想要的。听起来很奇怪?请允许我解释一下。
假设您要搜索术语 Orange,但如果特定文件还包含术语 Oranges,则包含术语 Oranges 的行也将是显示为输出。
要解决此问题,您可以使用 -w 选项并指定模式:
grep -w PATTERN Filename例如,在这里,我打算查找术语 err,因此我将使用 -w 标志,并且还将向您展示当您不使用时发生的情况之间的差异它。
grep -w err error.log当我使用 -w 标志查找 err 字符串时,它没有返回任何结果,因为它不存在。
但在第二次尝试中,我删除了 -w 标志,它返回了两个显示内容的结果,其中字符串模式是另一个字符串的一部分(不是单独的)。
9. 使用正则表达式模式进行高级搜索
如果普通搜索不能正常执行,那么您可以使用正则表达式模式(字符序列)来更好地控制您的搜索。您可以使用 -e 标志来使用正则表达式模式,而 -E 让您使用扩展的正则表达式:
grep -e/-E PATTERN Filename例如,在这里我使用扩展的正则表达式来查找文件中一起使用的两个元音:
grep -e '[aeiouAEIOU]{2}' error.log建议阅读📖
10. 使用 OR 运算符指定多个模式
您可以使用 OR 运算符指定多个模式,这在您想要高效搜索多个模式时非常有用。
要指定多个模式,请按以下方式使用 OR 运算符 (|):
grep 'PATTERN_1\|PATTERN_2' Filename假设我希望寻找两种模式:error 和 Please 那么我将使用以下内容:
grep 'error\|Please' error.log练习题📓
练习是最好的学习方式,这就是为什么我要分享一些 grep 命令的练习问题。
您可以使用我在本指南开头提到的 error.log 文件来解决以下问题:
从工作目录中存在的每个文件中查找
error字符串。查找不包含术语
success的行。搜索文件中包含
error或issue的行。通过禁用区分大小写的搜索并将输出重定向到文件来查找术语
log。如何只打印最后 2 个结果而忽略其他所有结果? (提示:使用tail命令)
如果您发现解决上述问题有任何困难,请通过评论与我们联系或在我们的社区论坛中发布您的疑问。
您可以下载 grep 命令备忘单以获取更多示例和信息:
您是高级用户吗?尝试 ripgrep
ripgrep 命令可以执行 grep 命令执行的所有操作,但还具有一些额外的优点,例如性能和功能,包括在 zip 文件中进行搜索的能力。
听起来很酷吗?以下是在 Linux 中安装和使用 ripgrep 的方法:
此外,如果您是 Linux 新手,我建议您也阅读我们的初学者命令教程。
💬分享您对该命令的想法、使用该命令的经验,以及您更喜欢用什么来替代 grep?












