简介:在这个适合初学者的指南中,我们将讨论 fgrep 命令的一些实际示例。在本指南结束时,用户将能够使用命令行界面高效地执行文本搜索操作。
文本搜索是最常执行的操作之一。然而,如果用户不熟悉正确的工具,这个简单的任务很快就会变得耗时。在 Linux 中,有各种文本过滤实用程序,例如,,切, ETC。
然而,在Linux中,fgrep是简单文本搜索的首选实用程序。在本指南中,我们将讨论一些实践示例fgrep可以在日常生活中使用的命令。
这fgrepLinux 中的命令属于。但是,它用于搜索固定字符串模式而不是正则表达式。因此该命令的名称是fgrep(固定 GREP)。
的语法fgrep命令与其他命令类似:
$ fgrep [OPTIONS] PATTERNS [FILES]
首先,我们创建一个包含以下内容的纯文本文件来使用示例:
$ cat input.txt

在这里,我们可以看到文本文件已准备好包含示例内容。现在我们来讨论一些常见的例子fgrep接下来的几个例子中的命令。
1. fgrep 与 grep 和 egrep 命令有何不同?
顾名思义,fgrep命令用于搜索固定的字符串模式。它将模式解释为固定字符串而不是正则表达式。因此,它以省时的方式执行搜索操作。
为了理解差异,我们使用点(.)字符与。
这个简单的正则表达式匹配除行尾之外的任何单个字符:
$ grep ha. input.txt

在上面的输出中,我们可以看到点(.)字符与文本匹配头发,帽子, 和有。
现在,让我们使用相同的模式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_颜色环境变量以启用默认行为:
$ unset GREP_COLOR
4. 如何在文件中搜索多个模式
有时,我们需要对多个字符串进行模式匹配。在这种情况下,我们可以从文本文件而不是命令行参数提供模式。
让我们创建一个文本文件,其中在单独的行上包含多个模式:
$ cat pattern.txt professionals website
现在,让我们将此文件与-f多个模式匹配的选项:
$ fgrep -f pattern.txt input.txt

在上面的输出中,我们可以看到字符串的模式匹配成功专业人士和网站。
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 $?

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 命令的其他最佳示例吗?请在下面的评论中告诉我们您的看法。
