Linux 中的 grep 命令示例Linux 中的 grep 命令示例Linux 中的 grep 命令示例Linux 中的 grep 命令示例
  • 业务
  • 目标
  • 支持
  • 关于
  • 联系我们
  • 登录
✕

Linux 中的 grep 命令示例

发表 admin at 2025年2月28日
类别
未分类
标签

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 PM

grep命令的实际例子

在本节中,我将介绍 grep 命令的各种示例,以便您可以更好地了解如何使用 grep 命令。

1. 不区分大小写的搜索

默认情况下,grep 命令模式区分大小写,并且在大多数情况下,它运行良好,但您可能希望关闭区分大小写。

为此,您可以使用 -i 标志,如下所示:

grep -i PATTERN Filename

为了演示这一点,我将使用 ERROR 作为搜索模式,它将显示匹配模式,而不考虑大小写:

grep -i ERROR error.log

2. 在匹配行的前后显示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.log

3. 显示与模式不匹配的线条

大多数情况下,您将使用 grep 命令来匹配模式,但它也允许您反转搜索结果。

简而言之,您指定搜索词,它将打印与给定模式不匹配的行,为此,您可以使用 -v 标志,如下所示:

grep -v PATTERN Filename

例如,如果我想打印不包含 error 术语的每一行,那么我将使用以下内容:

grep -v error error.log

4.显示匹配行数

要显示匹配行数,您所要做的就是使用 -n 标志,如下所示:

grep -n PATTERN Filename

5、显示匹配结果总数

如果您想知道匹配结果的数量,则可以使用 -c 标志,如下所示:

grep -c PATTERN Filename

例如,在这里,我想查找 error.log 文件中提到术语 error 的次数,因此我使用了以下命令:

grep -c error error.log

6. 在多个文件中搜索模式

如果您希望从多个文件中搜索模式,那么您所要做的就是附加多个文件进行搜索,如下所示:

grep PATTERN File1 File2

例如,在这里,我从两个文件中搜索了 error 字符串:error.log 和 error.txt,它给出了以下输出:

grep error error.log error.txt

7. 从目录中的每个文件中搜索模式

如果您想从目录中存在的每个文件中搜索特定模式,则可以递归地使用 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
?
您可以按 Shift + 反斜杠键来获取 OR 运算符。

假设我希望寻找两种模式:error 和 Please 那么我将使用以下内容:

grep 'error\|Please' error.log

练习题?

练习是最好的学习方式,这就是为什么我要分享一些 grep 命令的练习问题。

您可以使用我在本指南开头提到的 error.log 文件来解决以下问题:

  1. 从工作目录中存在的每个文件中查找 error 字符串。

  2. 查找不包含术语success 的行。

  3. 搜索文件中包含 error 或 issue 的行。

  4. 通过禁用区分大小写的搜索并将输出重定向到文件来查找术语 log。

  5. 如何只打印最后 2 个结果而忽略其他所有结果? (提示:使用tail命令)

如果您发现解决上述问题有任何困难,请通过评论与我们联系或在我们的社区论坛中发布您的疑问。

您可以下载 grep 命令备忘单以获取更多示例和信息:

您是高级用户吗?尝试 ripgrep

ripgrep 命令可以执行 grep 命令执行的所有操作,但还具有一些额外的优点,例如性能和功能,包括在 zip 文件中进行搜索的能力。

听起来很酷吗?以下是在 Linux 中安装和使用 ripgrep 的方法:

此外,如果您是 Linux 新手,我建议您也阅读我们的初学者命令教程。

?分享您对该命令的想法、使用该命令的经验,以及您更喜欢用什么来替代 grep?

©2015-2025 Norria support@norria.com