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