文本搜索是最常执行的操作之一。然而,如果用户不熟悉正确的工具,这个简单的任务很快就会变得很耗时。在 Linux 中,有各种文本过滤实用程序,例如 awk、sed、cut等。
但是,在 Linux 中,fgrep 是简单文本搜索的首选实用程序。在本指南中,我们将讨论可在日常生活中使用的 fgrep 命令的一些实践示例。
Linux 中的 fgrep 命令属于grep 命令家族。但是,它用于搜索固定字符串模式而不是正则表达式。因此,该命令的名称是fgrep(Fixed GREP)。
fgrep 命令的语法类似于其他 grep 系列命令:
首先,让我们创建一个包含以下内容的纯文本文件来使用示例:
在 Linux 中查看文件内容
在这里,我们可以看到文本文件已准备好包含示例内容。现在让我们在接下来的几个示例中讨论 fgrep 命令的一些常见示例。
1. fgrep 与 grep 和 egrep 命令有何不同?
顾名思义,fgrep 命令用于搜索固定字符串模式。它将模式解释为固定字符串而不是正则表达式。因此,它以一种节省时间的方式执行搜索操作。
为了理解差异,让我们在 grep 命令中使用点(.)字符。
这个简单的正则表达式匹配除行尾之外的任何单个字符:
使用 Grep 搜索单个字符
在上面的输出中,我们可以看到点(.)字符与文本at、atc和att匹配。
现在,让我们对 fgrep 命令使用相同的模式并观察结果:
在上面的输出中,我们可以看到该命令无法找到给定的模式。
发生这种情况是因为 fgrep 命令无法识别正则表达式并尝试搜索不存在的模式 – “at.”。
2. 如何在文件中搜索字符串
让我们从基本示例开始,我们将在 linuxmi.txt 文件中搜索字符串 matches:
在文件中搜索字符串
正如我们所看到的,成功在两个地方匹配成功,并以红色突出显示。
3. 如何设置匹配模式的 Grep 输出颜色
在前面的示例中,我们看到,默认情况下,匹配的模式以红色突出显示。但是,我们可以通过为 GREP_COLOR 环境变量分配不同的值来改变这种行为。
让我们将值32分配给GREP_COLOR环境变量以高亮显示绿色的匹配模式:
为匹配模式设置 Grep 输出颜色
现在,在转到下一个示例之前,取消设置 GREP_COLOR 环境变量以启用默认行为:
4.如何在一个文件中搜索多个模式
有时,我们需要对多个字符串进行模式匹配。在这种情况下,我们可以提供文本文件中的模式而不是命令行参数。
让我们创建一个文本文件,在单独的一行中包含多个模式:
现在,让我们将此文件与-f多个模式匹配选项一起使用:
使用 fgrep 搜索多个模式
在上面的输出中,我们可以看到字符串professionals和website的模式匹配成功。
5.如何限制文件中的匹配数
默认情况下,fgrep 命令会继续执行模式匹配,直到处理完整个文件。
但是,有时我们需要限制匹配的数量。在这种情况下,我们可以-m在命令中使用该选项:
在此示例中,fgrep命令在匹配第一个模式后停止文件处理。
6. 查找模式时如何打印文件名
有时,我们只需要找到存在特定模式的文件的名称。在这种情况下,我们可以使用 fgrep 命令的-l选项:
在这里,我们可以看到该命令只打印文件名而不是具有匹配模式的行。
7.模式匹配失败时如何打印文件名
在前面的示例中,我们看到了如何在模式匹配成功时打印文件名。现在,让我们看看如何以相反的方式执行操作。
让我们尝试在文件中找到不存在的模式并观察结果:
在这个例子中,我们使用了-L当模式匹配不成功时打印文件名的命令选项。
8. 如何忽略错误信息
在编写 shell 脚本时,错误处理起着至关重要的作用。但是,在一些非关键场景中,我们可以安全地忽略错误消息。
在fgrep中,我们可以使用-s 忽略与不存在或不可读文件相关的错误的选项。为了更好地理解这种行为,让我们尝试在不存在的文件中搜索模式:
在上面的输出中,我们可以看到该命令没有在标准错误流中显示任何错误。但是,失败是由非零返回值报告的。
除此之外,我们还可以在文件不可读时观察到相同的行为。因此,首先,使用chmod命令修改文件权限:
现在,尝试搜索模式并观察结果:
Grep 忽略错误信息