如何在 Linux 中使用 fgrep 命令搜索字符串

简介:在这个适合初学者的指南中,我们将讨论 fgrep 命令的一些实际示例。在本指南结束时,用户将能够使用命令行界面高效地执行文本搜索操作。

文本搜索是最常执行的操作之一。然而,如果用户不熟悉正确的工具,这个简单的任务很快就会变得耗时。在 Linux 中,有各种文本过滤实用程序,例如,,切, ETC。

然而,在Linux中,fgrep是简单文本搜索的首选实用程序。在本指南中,我们将讨论一些实践示例fgrep可以在日常生活中使用的命令。

这fgrepLinux 中的命令属于。但是,它用于搜索固定字符串模式而不是正则表达式。因此该命令的名称是fgrep(固定 GREP)。

的语法fgrep命令与其他命令类似:

$ fgrep [OPTIONS] PATTERNS [FILES]

首先,我们创建一个包含以下内容的纯文本文件来使用示例:

$ cat input.txt
在Linux中查看文件内容

在这里,我们可以看到文本文件已准备好包含示例内容。现在我们来讨论一些常见的例子fgrep接下来的几个例子中的命令。

1. fgrep 与 grep 和 egrep 命令有何不同?

顾名思义,fgrep命令用于搜索固定的字符串模式。它将模式解释为固定字符串而不是正则表达式。因此,它以省时的方式执行搜索操作。

为了理解差异,我们使用点(.)字符与。

这个简单的正则表达式匹配除行尾之外的任何单个字符:

$ grep ha. input.txt
使用 Grep 搜索单个字符

在上面的输出中,我们可以看到点(.)字符与文本匹配头发,帽子, 和有。

现在,让我们使用相同的模式fgrep命令并观察结果:

$ fgrep ha. input.txt

在上面的输出中,我们可以看到该命令无法找到给定的模式。

发生这种情况是因为fgrep命令无法识别正则表达式并尝试搜索不存在的模式 –“ha.”。

[您可能还喜欢:]

2. 如何在文件中搜索模式

让我们从基本示例开始,我们将在一个字符串中搜索专业人士输入.txt文件:

$ fgrep professionals input.txt
在文件中搜索模式

正如我们所看到的,模式匹配在两个地方成功,并以红色突出显示。

3. 如何设置匹配模式的 Grep 输出颜色

在前面的示例中,我们看到默认情况下,匹配的模式以红色突出显示。但是,我们可以通过为GREP_COLOR环境变量。

我们来赋值32到GREP_COLOR环境变量以绿色突出显示匹配的模式:

$ export GREP_COLOR=32
$ fgrep professionals input.txt
设置 Grep 输出颜色以匹配模式

现在,在转到下一个示例之前,请取消设置GREP_颜色环境变量以启用默认行为:

$ unset GREP_COLOR

4. 如何在文件中搜索多个模式

有时,我们需要对多个字符串进行模式匹配。在这种情况下,我们可以从文本文件而不是命令行参数提供模式。

让我们创建一个文本文件,其中在单独的行上包含多个模式:

$ cat pattern.txt

professionals
website

现在,让我们将此文件与-f多个模式匹配的选项:

$ fgrep -f pattern.txt input.txt
使用 fgrep 搜索多种模式

在上面的输出中,我们可以看到字符串的模式匹配成功专业人士和网站。

5. 如何限制文件中的匹配项数量

默认情况下,fgrep命令继续执行模式匹配,直到处理整个文件。

然而,有时我们需要限制匹配的数量。在这种情况下,我们可以使用-m选项与命令:

$ fgrep -m 1 professionals input.txt

TecMint was started on 15th August 2012 by technical professionals and all the

在此示例中,fgrep命令在匹配第一个模式后停止文件处理。

6. 搜索花样时如何打印文件名

有时,我们只需要找到存在特定模式的文件的名称。在这种情况下,我们可以使用-l的选项fgrep命令:

$ fgrep -l professionals input.txt

input.txt

在这里,我们可以看到该命令仅打印文件名,而不是具有匹配模式的行。

7. 模式匹配失败时如何打印文件名

在前面的示例中,我们了解了如何在模式匹配成功时打印文件名。现在,让我们看看如何以相反的方式执行该操作。

让我们尝试查找文件中不存在的模式并观察结果:

$ fgrep -L non-existing-word input.txt

input.txt

在这个例子中,我们使用了-L当模式匹配不成功时打印文件名的命令选项。

8. 如何抑制错误消息

错误处理在编写 shell 脚本时起着至关重要的作用。但是,在一些非关键场景中,我们可以安全地忽略错误消息。

在fgrep,我们可以使用-s抑制与不存在或不可读文件相关的错误的选项。为了更好地理解这种行为,让我们尝试在不存在的文件中搜索模式:

$ fgrep -s professionals non-existing-file.txt
$ echo $?

2

在上面的输出中,我们可以看到该命令在标准错误流上没有显示任何错误。然而,失败是由非零返回值报告的。

除此之外,当文件不可读时,我们还可以观察到相同的行为。因此,首先,使用以下命令修改文件权限chmod命令:

$ chmod 000 input.txt 
$ ls -l input.txt

现在,尝试搜索模式并观察结果:

$ fgrep -s professionals input.txt 
$ echo $?
Grep 忽略错误消息

9. 如何排除部分匹配的行

在前面的例子中,我们看到fgrep命令执行部分匹配。然而,在某些情况下,我们需要对整行进行精确匹配。在这种情况下,我们可以使用-x的选项fgrep命令。

$ fgrep -nx "the same site is sometimes hard to find." input.txt
在文件中查找精确匹配

在上面的输出中,精确的行匹配发生在第 20 行。

10. 如何在递归搜索时排除文件

有时,我们在执行搜索操作时需要跳过某些文件。在这种情况下,我们可以使用--exclude的选项fgrep命令。

要理解这一点,首先创建一个目录并将一些示例文件复制到其中:

$ mkdir dir-1
$ cp input.txt dir-1/input.txt
$ cp input.txt dir-1/input.data
$ cp input.txt dir-1/input.md 

现在,让我们在所有文件中搜索该模式目录-1目录除了“.txt”文件:

$ fgrep -r --exclude *.txt professionals dir-1
搜索模式时排除文件

在上面的输出中,我们可以看到对文件执行了模式匹配“.md”和“.data”扩展。

11. 如何在递归搜索时排除多种文件类型

在前面的示例中,我们了解了如何排除具有特定扩展名的文件。但是,当我们想要排除具有多个扩展名的文件时,该命令会变得很长。在这种情况下,我们可以从文件中提供排除模式而不是命令行参数:

因此,让我们创建一个文本文件,其中在单独的行上包含多个排除模式:

$ cat skip-pattern.txt 
*.txt
*.data

现在,让我们将此文件与--exclude-from选项:

$ fgrep -r --exclude-from skip-pattern.txt professionals dir-1
搜索模式时排除多种文件类型

在这里,我们可以看到对文件执行了模式匹配“.md”仅扩展。

12. 如何在递归搜索时包含文件

在前面的示例中,我们了解了如何在递归执行搜索操作时排除文件。现在,让我们看看如何以相反的方式执行该操作。

让我们使用--include的选项fgrep命令对文件执行搜索“*.txt”扩大:

$ fgrep -r --include "*.txt" professionals dir-1
搜索模式时包含文件

在上面的输出中,我们可以看到对于带有以下内容的文件跳过了模式匹配“*.md”和“*.data”扩展。

在本文中,我们讨论了一些有用的示例fgrep命令。初学者可以在日常生活中使用这些示例来提高使用 Linux 的工作效率。

您知道 Linux 中 fgrep 命令的其他最佳示例吗?请在下面的评论中告诉我们您的看法。